문제
네트워크 외부의 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>
<머리>
< script language="javascript">
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);
}
< script / >
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가 흔들립니다 :-)