URL을 가져올 때 웹 브라우저가 POST를 사용하도록 어떻게 강제합니까?

StackOverflow https://stackoverflow.com/questions/1651197

  •  22-07-2019
  •  | 
  •  

문제

URL을 가져올 때 웹 브라우저가 POST를 사용하도록 어떻게 강제합니까?

도움이 되었습니까?

해결책

게시물을 메소드로 지정하는 HTML 양식을 사용하십시오.

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>

만약 너라면 가졌다 이를 링크로 만들기 위해 (권장되지 않음) onclick 핸들러가 동적으로 양식을 작성하고 제출할 수 있습니다.

<script type="text/javascript">
function submitAsPost(url) {
    var postForm = document.createElement('form');
    postForm.action = url;
    postForm.method = 'post';
    var bodyTag = document.getElementsByTagName('body')[0];
    bodyTag.appendChild(postForm);
    postForm.submit();
}
</script>
<a href="/my/url" onclick="submitAsPost(this.href); return false;">this is my post link</a>

서버 측에서 이것을 시행 해야하는 경우 HTTP 메소드를 확인하고 게시와 같지 않으면 HTTP 405 응답 코드 (허용되지 않음) 브라우저로 돌아가서 종료합니다. 프로그래밍 언어/프레임 워크 등에 의존하는 방법을 정확히 구현하는 방법.

다른 팁

<form method="post">

URL을 받고 있다면 게시하지 않고 URL을 받고 있습니다. 브라우저가 위치 막대를 통해 게시물 요청을 발행 할 수는 없습니다.

귀하의 질문을 통해 귀하는 브라우저의 주소 표시줄에 게시물 요청을 보내고자 했다는 느낌이 들었습니다.

주소 표시줄에 다음을 입력하고 'action' 값을 원하는 URL로 바꾸세요.

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">

잘못된 HTML이지만 브라우저(적어도 지금까지 테스트한 모든 브라우저)는 사용자가 의미하는 바를 알고 있으므로 가능한 한 짧게 유지하고 싶었습니다.

값을 게시하려면 원하는 만큼 입력을 추가하고 각 입력의 이름과 값을 원하는 대로 바꾸세요.

<input value="hugh.mahn@person.com" name="email">
<input value="passwordsavedinhistory" name="password">

귀하가 게시한 민감한 정보는 다음 위치에서 볼 수 있다는 점을 기억하는 것이 중요합니다.

  • 당신의 역사
  • 주소 표시줄
  • 브라우저의 자동 완성.
  • 동일한 탭에서 방문하는 다른 사이트일 수도 있음
  • 아마 다른 것들도 많을 거야

게시물 요청을 보내는 것은 정말 나쁜 방법이고 다른 모든 답변은 훨씬 더 좋지만 그렇게 할 수 있다는 것은 여전히 ​​멋진 일입니다.

무언가를 테스트하려면 사용하는 것이 좋습니다. 바이올리니스트 HTTP 요청을 제작합니다. 요청 내용뿐만 아니라 조치 동사 (Get, Post, Put, Delete 등)를 지정할 수 있습니다. 링크에서 매우 구체적인 요청을 테스트하려고하지만 대신 Post와 함께 브라우저가 작성하는 요청을 모니터링하고 수정 된 사후 조치로만 재발행 할 수 있습니다.

웹 브라우저가 Post 헤더로 URL을 보내도록 강요 할 수 없습니다. 그러나 사후 요청 URL을 테스트하기 위해 "포스터"확장을 제안 할 수 있습니다. 크롬 그리고 모질라

위의 Sompospost () 함수는 훌륭하고 우아한 솔루션이지만 문제가 있습니다. URL이 너무 길면 일부 브라우저 (Firefox 및 IE 포함)가 오류를 반환합니다. 우리 중 많은 사람들 이이 제한을 우회하기 위해 게시물을 사용하기 때문에이 솔루션을 제안합니다.

// submit a URL using post
function submitAsPost(url) {
    var bodyTag = document.getElementsByTagName('body')[0];
    var postForm = document.createElement('form');
    bodyTag.appendChild(postForm);
    postForm.method = 'POST';

    var serverAndParams = url.split("?");
    postForm.action = serverAndParams[0];
    var params = null;
    try
    {
      var paramsAndHash = serverAndParams[1].split("#");
      params = paramsAndHash[0]; 
      var attrList = params.split("&");
      for (var i = 0; i < attrList.length; i++)
      {
        try
        {
          var keyValue = attrList[i].split("=");
          var el = document.createElement('input');
          el.type="hidden";
          el.name=keyValue[0];
          var value = keyValue[1];
          value = value.replace(/\+/g, ' ');
          el.value=decodeURIComponent(value);
          postForm.appendChild(el);
        }
        catch(error){}
      } 
    }
    catch(error){}

    postForm.submit();
    bodyTag.removeChild(postForm);
}

Firefox, Chrome 및 IE로 테스트.

도구를 사용하여 테스트 할 수 있습니다. 나는 항상 당신과 같은 질문을합니다. 온라인으로 사용할 수있는 도구가 몇 가지 있습니다. 내가 사용하는 도구는 다음과 같습니다. http://www.hurl.it/

나는이 질문이 늙었다는 것을 알고 있지만 누군가는 이것을 유용 할 수 있습니다. Curl과 같은 명령 줄 도구를 사용할 수 있습니다.http://curl.haxx.se/) URL에 게시합니다.

예시:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"

이것은 게임에서 조금 늦었지만 나는 이것을 가로 질러 달렸고 HTML 5가 약간의 변경을했다는 것을 알았습니다. 입력 태그를 사용하여 FormMethod (따라서 게시물 선택)를 추가 할 수 있습니다. 이것은 나를 위해 효과가있었습니다.

보다 : http://www.w3schools.com/tags/att_input_formmethod.asp

당신이해야 할 문제가 있다면 :

request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));

그리고 Dev 도구에서는 여전히 GET을 수행하고 있습니다. 즉, URL이 다음 형식이라는 것을 의미합니다.

http://example.com/folder

의미가 있어야합니다.

http://example.com/folder/

그것은 매우 기괴한 오류일지도 모릅니다. 아마도 당신의 질문과 관련이 없을 수도 있지만 나는 몇 번이나 그것을 가지고 있었고 심각하게 위험 해 보이기 때문에 거기에 있어야합니다. 이것은 Ubuntu 14.04에서 Apache 2 서버를 사용할 때 나에게 발생했으며, 구성은 많지 않습니다.

유틸리티 "바이올리니스트"Telerik (Free Ware) : HTTP 요청을"작성 "하고 선택한 메소드 (Get, Post, Put, Del 등)를 사용하여 보낼 수 있습니다. 요청 및 응답에 대한 자세한 정보도 제공합니다. 테스트 및 디버깅 중에 매우 유용 할 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top