2014-01-16 4 views
1

ServerXMLHTTP 개체를 사용하여 HTTPS "GET"요청을 보낼 때 "시간 초과"와 관련된 질문이 있습니다.ServerXMLHTTP 기본 시간 제한을 사용하여 2 초 미만의 시간 제한

로그인 한 사용자의 ID와 암호로 요청을 보내도록 속임수를 쓰려면 더미 프록시를 사용하도록 설정 한 다음 인트라넷에서 URL의 도메인을 제외 시키십시오. 따라서 변수 url_to_get에는 .mydomain.com이 포함되어 있지만 프록시 주소는 실제로 "not.used.com"입니다.

// JScript source code 
HTTP_RequestObject = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0"); 

// Using logged in username authentication 
HTTP_RequestObject.open("GET", url_to_get, false); 
HTTP_RequestObject.setProxy(2, "not.used.com", "*.mydomain.com"); 

try 
{ 
    HTTP_RequestObject.send(); 
} 
catch (e) 
{ 
} 

catch 블록에서 "(0x80072EE2) 작업 시간 초과"예외를 기록합니다. 이것은 열리기 직전에 로그 메시지가 기록 된 후 1 초에서 2 초 사이의 시간이 기록됩니다.

다시 시도는 예상대로 작동하며 반복해서 수행 할 수 있습니다. 이것은 서버 측에서 뭔가요? 아니면 프록시의 결과입니까?

답변

0

글쎄, 고통스럽고 당황했습니다. 타임 아웃과 관련된 문제의 근본 원인을 알아 냈습니다. 타임 아웃을 실제 기본값보다 3 배 작은 "기본값"으로 설정했습니다. 그래서 제가 생각하기에 제가 큰 값이라고 생각했던 것까지 증가 시켰을지라도 나는 디폴트보다 여전히 짧았습니다.

나는 Microsoft page describing the setTimouts() method에있는 문구를 통해 건너 뛴 다음 매개 변수의 시간 기준을 잘못 해석했습니다. 실제로는 밀리 초 동안 초를 사용했습니다.

이 문제를 디버깅하는 과정에서 다른 COM 개체 인 "WinHttp.WinHttpRequest.5.1"을 사용하여 코드를 복제했으며 해당 API 인 SetTimeouts()을 확인하면 가짜 API를 발견했습니다.

"WinHttp.WinHttpRequest.5.1"에는 SetAutoLogonPolicy() [3] 메서드가있어 "프록시"라는 어리 석음을 생략 할 수 있습니다. Msxml2.ServerXMLHTTP.6.0 "을 사용하여 사용자의 자격 증명을 인트라넷 서버로 보내도록합니다. 나는 또한 Fiddler [4]를 만지작 거리며 위험 할 정도로 배웠다.

다른 사람들이 내 실수에서 배우고 이것이 나중에 자신의 문제를 디버깅하는 데 유용 할 수 있기를 바랍니다. 내가 게시 할 수있는 충분한 담당자를 가지고 있지 않기 때문에 여기에

일부 인라인 링크가있는 두 개 이상의 :

[3] : msdn.microsoft.com/en-us/library/windows/desktop/aa384050%28v = VS.85 % 29.aspx

[4] : fiddler2.com

0

Msxml2.ServerXMLHTTP.6.0는 프록시를 통해 사용할 수있다. 그것은 나에게 오래 걸렸다. 그러나 끈질기는 지불했다. Microsoft의 조언에 따라 WinHttp.WinHttpRequest.5.1에서 Msxml2.ServerXMLHTTP.6.0으로 옮겼습니다. varHTTP가 Msxml2.ServerXMLHTTP.6.0에 개체 참조가이 도움이 당신이 Msxml2.ServerXMLHTTP.6.0와 이후 추구

varHTTP.setproxy 2, ProxyServerName, "BypassList" 

희망을 사용할 수있다

.