2011-01-26 3 views
20

이것은 아마도 제가 경험 한 이상한 문제 일 것입니다. POST에 URL을 제출하는 코드가 있습니다. 코드가 작동하지 않거나 피들러가 실행되고 있지 않을 때 예외를 throw하지 않습니다. 그러나 피들러가 실행 중일 때 코드는 데이터를 successfuly 게시합니다. 데이터가 게시되었는지 여부를 알 수 있도록 게시 페이지에 대한 액세스 권한이 있습니다. 이것은 아마도 매우 비 의미입니다. 그러나 그것은 내가 겪고있는 상황이고 매우 혼란 스럽습니다. 이렇게하지 않습니다피들러가 실행 중일 때를 제외하고 HttpWebRequest가 작동하지 않습니다.

byte[] postBytes = new ASCIIEncoding().GetBytes(postData); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://myURL); 
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10"; 
req.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
req.Headers.Add("Accept-Language", "en-US,en;q=0.8"); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.ContentLength = postBytes.Length; 
req.CookieContainer = cc; 
Stream s = req.GetRequestStream(); 
s.Write(postBytes, 0, postBytes.Length); 
s.Close(); 
+1

요청이 우연히 리디렉션지고와 피들러이를 처리를 webconfig에 전화

using (HttpWebResponse responseClaimLines = (HttpWebResponse)requestClaimLines.GetResponse()) { using (StreamReader reader = new StreamReader(responseClaimLines.GetResponseStream())) { responseEnvelop = reader.ReadToEnd(); } } 

추가 다음 항목 후 확인 모든 자원 방출을? – BrokenGlass

+0

리다이렉션이 있다면 나는 바이올린의 로그에서 볼 수있을 것입니다. – deadlock

+0

'postBytes'는 url로 인코딩되어야하는 문자를 포함 할 수 있습니까? 어쩌면 피들러가 당신을 조용히 필터링하고 있을까요? –

답변

14

것은 당신은 응답을 닫을 수 없습니다. 응답을 닫지 않으면 나쁜 상태의 소켓이 .NET에 있습니다. 나중에 요청에 방해가되지 않도록 응답을 닫아야합니다.

2

그럼 내가 다시 비슷한 문제가 몇 주에 직면하고 이유는 피들러 그것을 실행 중일 때하는 피들러를 통해하지만 프록시를 닫을 때 어떻게 든 남아 요청을 전달하는 프록시 설정을 변경이었다과 귀하의 요청을 인터넷에서 계속 진행하십시오.

나는 인터넷 익스플로러와 파이어 폭스의 네트워크 설정을 프록시를 사용하지 않도록 설정하여 시도했다. 당신이 GetResponseStream()를 호출하지 않는 경우

이 같은 문제가있을 수 있습니다,이 시도

...

+0

언급 한대로 IE와 Firefox에서 프록시 설정이 있습니다. 나는 프록시를 사용하지 않도록 설정했지만 문제는 해결되지 않았습니다. – deadlock

+0

두 가지를 말해주세요. 코드에서 URL로 GET 요청을 보낼 수 있습니까? 둘째 다른 URL을 사용해 보셨습니까? graph.facebook.com/me보십시오 (분명히 페이 스북은 오류를 반환하지만 데이터가 통과하는지 알 수 있습니다) –

+0

예 GET 요청을 정상적으로 보내고 응답을 완벽하게받을 수 있다고 확신합니다. 나는 다른 URL로 시도 할 것이지만 같은 문제가 발생할 것이라고 생각한다. – deadlock

5

최근에 비슷한 문제가있었습니다. Wireshark는 Fiddler가 실행 중이 아니면 HTTPWebRequest가 클라이언트 컴퓨터를 떠나지 않는다는 것을 나타냅니다. 프록시 설정을 제거하려고했지만 그 문제가 해결되지 않았습니다. 나는 요청을 HttpVersion.Version10으로 설정하는 것에서부터 SendChuck, KeepAlive 및 기타 설정을 활성화/비활성화하는 모든 작업을 시도했습니다. 어느 것도 효과가 없었다.

궁극적으로 .Net이 프록시를 감지하여 요청을 무시하려고 시도했는지 확인했습니다. 그 request.GetResponse() 즉각적인 예외를 던지고 내 문제가 해결되었습니다. 내 경우

IWebProxy proxy = request.Proxy; 

if (request.Proxy != null) 
{ 
    Console.WriteLine("Removing proxy: {0}", proxy.GetProxy(request.RequestUri)); 
    request.Proxy = null; 
} 
+0

request.Proxy = null을 호출했습니다. 모든 GetResponse(); 호출 및 그 나를 위해 일한 –

3

내가 같은 상황했다 코드가 외부 서버에 대한 프록시 뒤에 개발 환경에서 IISExpress에서 실행중인 응용 프로그램에서 POST를 전송했다 (피들러가 실행 중일 때 POST 만 작동). IIS가 실행중인 환경에서 인터넷 옵션에 프록시 설정이 구성되어 있어도 액세스 권한이 없을 수 있습니다. 필자의 작업 환경에서는 web.config를 프록시의 구성 스크립트 경로로 업데이트해야했습니다. 다른 프록시 설정을 조정해야 할 수도 있습니다. 이 경우 귀하의 친구는 그들이 무엇인지 설명하는 MSDN 페이지입니다 : http://msdn.microsoft.com/en-us/library/sa91de1e.aspx.

궁극적으로 나는 응용 프로그램의 web.config에 다음 내용을 포함시킨 다음 POST를 진행했습니다.

<configuration> 
    <system.net> 
    <defaultProxy> 
     <proxy scriptLocation="http://example.com:81/proxy.script" /> 
    </defaultProxy> 
    </system.net> 
</configuration> 
7

가져온 후 HttpWebResponse을 닫습니다.

나는 똑같은 문제가 있었다. 그런 다음 각 요청 후에 응답을 닫고 Boom, fiddler를 실행할 필요가 없다.

는 동기 코드의 의사입니다 :

request.create(url); 

///codes 

httpwebresponse response = (httpwebresponse)request.getresponse(); 

/// codes again like reading it to a stream 

response.close(); 
+0

제 경우에는 리디렉션을 추적 할 수있는'GetWebResponse'를 오버로드하는 사용자 지정 WebClient를 사용하고 있습니다. 이 글을 읽은 후 새로운 요청을 시작하기 전에 기존 응답을 닫지 않고 있음을 깨달았습니다. –

+0

감사합니다! 두 시간 동안 머리를 긁적이면 나를 위해 일했습니다. –

2
내가 파이썬과 같은 문제로 실행

- 내가 피들러들이 실행 그들을 실행했을 때 다음하지만, 로컬 서버에 대한 요청이 404에 실패했다 제대로 작동했다.

여기에서 문제의 진정한 단서는 HTTP 트래픽의 프록시 역할을하여 로컬 시스템의 모든 요청이 네트워크로 직접 들어가기보다는 피들러를 통과한다는 것입니다. 나는에, 나는 로컬 서버에 요청을 하였다 정확한 상황에서

는 일반 트래픽은 네트워크 연결 Bypass proxy server for local addresses 옵션이 체크 된 Proxy server 창에 대한 프록시를 통해 Local Area Network (LAN) Settings에 전달합니다.

내 생각에 "로컬 주소 용 프록시 서버 사용 안 함"이 반드시 프로그래밍 언어에 의해 선택되지는 않지만 프록시 서버 세부 정보가 있습니다. Fiddler는 정책을 알고 있으므로 Fiddler의 작업을 통한 요청이지만 프로그래밍 언어에서 직접 요청하는 것은 아닙니다.

로컬 서버에 대한 요청에 대한 프록시를 설정하지 않으면 코드에서 올바르게 작동합니다. 물론 배포 중에 내부 서버에서 외부 서버로 이동하는 경우에는 문제가 될 수 있습니다.

1

나는 똑같은 시나리오에 직면했다. 윈도우 인증 뒤에있는 엔드 포인트에 게시했다.

Fiddler keeps a pool of open connections 그러나 C# 테스트 또는 powershell 스크립트 은 fiddler없이 실행될 때이 아닙니다.

따라서 HttpWebRequest에서 UnsafeAuthenticatedConnectionSharing 속성을 true로 설정하여 열려있는 인증 된 연결 풀을 유지 관리하는 테스트/스크립트를 만들 수 있습니다. more about it here, microsoft KB을 읽으십시오. 이 기사의 두 경우 모두 두 개의 요청을 처리하고 있음을 알 수 있습니다. 첫 번째 것은 인증 헤더 (핸드 셰이크를 완료하기 위해)를 얻는 간단한 GET 또는 HEAD이고 두 번째 것은 이전에 얻은 헤더를 사용할 POST입니다.

분명히 (슬픔)은 POST http 요청으로 직접 핸드 셰이크를 할 수 없습니다.

1

여기에는 매우 비슷한 문제가 있습니다. 우리는 원격 서비스에 연결하고 있으며 거의 ​​항상 실패하는 것처럼 보입니다. 그러나, 우리가 피들러 (웹 서버에서)를 통해 프록시 할 때 모든 것이 훌륭하게 작동합니다. 우리는 지금 디버깅하기 위해 노력하고 있지만 이것은 매우 비슷한 문제인 것처럼 들립니다.

0

항상 구문을 사용하십시오. 이 파일

<system.net> 
<connectionManagement> 
<add address="*" maxconnection="30"/> 

관련 문제