문제

네트워크 외부의 URL에 일부 매개변수를 게시해야 하는데 상대방의 개발자가 HTTP 매개변수를 사용하지 말라고 요청했습니다.대신에 키-값을 게시해야 합니다. HTTP 헤더.

사실 저는 그 말이 무슨 뜻인지 잘 이해하지 못합니다.나는 XmlHttp 개체와 함께 ajax와 같은 게시물을 사용하려고 시도했으며 헤더에 다음과 같은 내용을 쓰려고했습니다.

Request.Headers.Add(key,value);

하지만 나는 할 수 없습니다(프레임워크에서 예외).나는 다음과 같은 Response 객체를 사용하여 다른 방법을 시도했습니다.

Response.AppendHeader("key", "value");

그런 다음 페이지로 리디렉션됩니다.하지만 이것도 작동하지 않습니다.

제가 거기에 갇혀 있는 게 분명한 것 같아요. 도움이 필요하신가요?


편집하다 내 환경은 Win Server 2003의 .Net 2.0, C#이라는 사실을 말하는 것을 잊어버렸습니다.내가 얻은 예외는

System.PlatformNotSupportedException was unhandled by user code
  Message="Operation is not supported on this platform."
  Source="System.Web"

이는 1년 전에 MS가 이를 허용하지 않는 몇 가지 보안 수정 사항을 게시한 Request.Add에 대한 나의 임시 작업으로 인해 발생한 것 같습니다.

도움이 되었습니까?

해결책

@lassevk가 말했듯이 리디렉션이 작동하지 않습니다.

페이지나 애플리케이션에서 HTTP POST를 수행하려면 WebRequest 클래스를 사용해야 합니다.예가 있어요 여기.

다른 팁

WebClient 클래스를 사용해 보셨나요?예는 다음과 같습니다.

        WebClient client = new WebClient();
        NameValueCollection data = new NameValueCollection();
        data["var1"] = "var1";
        client.UploadValues("http://somewhere.com/api", "POST", data);

HttpWebRequest를 살펴보세요.HttpWebRequest.Method = "POST"를 사용하여 문제의 URL에 대한 요청을 구성할 수 있어야 합니다.

더 많은 정보를 게시해야 합니다.

예를 들어, 이것은 C#입니까?그럴 것 같긴 한데 제가 틀렸을 수도 있어요.

또한 예외가 발생했다고 하는데 예외 유형과 메시지는 무엇입니까?

어떤 경우에도 POST를 위해 페이지로 리디렉션할 수 없으며 서버 리디렉션이 아닌 브라우저에서 제출해야 합니다. 따라서 이를 자동화하려면 다음을 사용하여 HTML 페이지를 생성해야 할 것 같습니다. 숨겨진 입력 필드가 포함된 양식 태그를 만든 다음 자바스크립트로 제출하세요.

제 생각에는 그들이 URL 매개변수(GET)를 사용하는 것을 원하지 않는다는 뜻인 것 같습니다.http 헤더를 사용하는 경우 더 이상 POST를 통해 쿼리하지 않습니다.

어떤 언어/프레임워크?

Python과 httplib2를 사용하면 다음과 같은 작업을 수행할 수 있습니다.

http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))

나는 Request 개체가 미리 정의된 특정 헤더 집합만 허용한다고 생각합니다.

지원되는 모든 HTTP 헤더를 나열하는 열거형도 있습니다.

그런데 지금은 기억이 안 나네요...잠시 후에 찾아볼게요...

XmlHttpRequest 옵션을 사용하여 2개의 샘플 페이지를 사용하여 시나리오를 테스트했습니다.XmlHttpRequest를 사용하여 게시된 aspx 페이지에서 사용자 정의 헤더를 사용할 수 있습니다.

다음 2개의 페이지를 만듭니다.디버거에서 실행하고 중단점을 설정하고 Request.Header 컬렉션을 검사할 수 있도록 aspx 페이지가 솔루션에 있는지 확인하세요.

<html>

<머리>

&lt; script language="javascript"&gt;

function SendRequest()
{
    var r = new XMLHttpRequest();
    r.open('get', 'http://localhost/TestSite/CheckHeader.aspx');
    r.setRequestHeader('X-Test', 'one');
    r.setRequestHeader('X-Test', 'two');
    r.send(null);

}
&lt; script / &gt;

u003C/head>nu003Cbody>nu003Cform>nu003Cinput type="button" value="Click Me" OnClick="SendRequest();" />nu003C/form>nu003C/body>nu003C/html>


CheckHeader.aspx

시스템 사용;

System.Web 사용;

System.Web.UI 사용;

공개 부분 클래스 CheckHeader:시스템.웹.UI.페이지

{

protected void Page_Load(object sender, EventArgs e)
{
    string value = string.Empty;
    foreach (string key in Request.Headers)
        value = Request.Headers[key].ToString();
}

}

남성..이 HTML 편집기는 짜증나..아니면 제가 어떻게 사용하는지 모르겠어요...

어제 내가 겪었던 예외는 이미 만들어진 페이지의 헤더에 글을 쓰려는 나의 어리석은 시도 때문에 발생했습니다.

여기에 표시된 방법 중 하나에 따라 요청 생성을 시작하면 헤더를 작성할 수 있습니다.

이제 @sectrean으로 표시된 샘플에서와 같이 WebRequest 개체를 사용하고 있습니다. 여기.

모두에게 감사드립니다.StackOverflow가 흔들립니다 :-)

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