2012-03-30 4 views
3

VB6에서 POST 요청을 보내는 데 문제가 있습니다. 아래 코드는 Windows7에서 제대로 작동하지만 Windows XP에서는 런타임 오류없이 실행되고 패킷을 보내지 만 패킷에 포스트 데이터를 추가하지 않는 것처럼 보입니다. 내 코드는 다음과 같다 :Windows XP에서 Vb6 http 게시물 요청

PARAMATERS 문자열 이미 마이크로 소프트 XML, 버전 4.0에 대한 참조를 추가하려고

"바 = foo는 & foo는 = 바"를 포함

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "POST", url, False 
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send parameters 

.

+0

'Content-Length' 헤더를 건너 뛰면 자동으로 처리됩니다. – wqw

답변

2

해결책을 찾았습니다. 나는 이런 식으로 코드를 변경 :

Dim xmlhttp As WinHttp.WinHttpRequest 
... 

Set xmlhttp = New WinHttp.WinHttpRequest 

xmlhttp.open "POST", url, False 
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send parameters 

는 기준에 "마이크로 소프트 WinHTTP에 서비스, 버전 5.1"

추가 그리고 지금은 작동합니다.

0

그냥 여기에서 추측하지만 길이에 10 (또는 100)을 추가하여이 줄을 변경해보십시오. 이 xmlhttp.setRequestHeader "콘텐츠 길이", 렌 (매개 변수)이 xmlhttp.setRequestHeader "콘텐츠 길이"에 , 렌 (매개 변수)를 변경 + 10

나는이 작업을 수행해야하는 이유를 나는 말했다 적이있다 , 그 길이에 10 개 이상을 더해야합니다.

0

이런 매개 변수를 대괄호로 묶어 보았습니까?

Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP") xmlhttp.open "POST", url, False  
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xmlhttp.setRequestHeader "Content-Length", Len(parameters) 
xmlhttp.Send (parameters) 

는 내가 무슨 일이 일어나고 생각하면 ServerXMLHTTP의 개체하는 ByRef 매개 변수를 전송되기 때문에 전송 방법의 올바른 과부하를 따기 때 혼란스러워지고 있다는 점이다. 사실, 보내려는 것이 BSTR 인 경우 IStream에 포인터를 보내고 있다고 생각합니다. 매개 변수를 괄호 안에 넣으면 컴파일러에서 ByRef 대신 ByVal 변수를 보내고 따라서 컴파일러는 포인터를 보내지 않고 Send 함수의 올바른 오버로드를 선택한다는 것을 알게됩니다.

+0

매개 변수가 바이트 배열 인 경우 특히'xmlhttp.Send CVar (매개 변수) '를 설정하는 것이 좋습니다. – wqw