2012-03-17 3 views
1

업데이트 : https URI로 데이터를 POST하려고합니다. POST는 HTTP 작동하지만 HTTPS URI 내가 웹 사이트에 데이터를 게시 할 EXE C#을을 윈폼 만드는 오전 안녕HTTPS POST in C#, Winforms (스트림 작성기, HttpWebResponse, HttpWebRequest)


실패합니다. 코드는 다음과 같습니다. 문제는 스트림이 내 게시물의 데이터를 복제한다 ..

예 :이 게시한다고 가정 - 나는 실제로 전송되는 어떤 트래픽을 검사 할 때 다음>username=bob

username=bobusername=bob

참조 ? 그것은 중복되며, 버퍼의 끝까지 한 번 더 같은 줄을 추가하고 보냅니다.

나는 이틀 동안 문제를 찾으려고 노력 중입니다. 어떤 신체가 이것을 해결할 수 있습니까? 아니면 몇 가지 힌트를주세요. .. 감사합니다

(콘텐츠 길이가 정확하게 12로 설정하지만 버퍼의 꼬리에 다시 한 번 같은 데이터를 추가 한 후, 24 바이트를 전송한다)

는 헤더가 있습니다

POST /login/ HTTP/1.0 
Content-Type: application/x-www-form-urlencoded 
Host: abc.test.com 
Content-Length: 12 

username=bobusername=bob 
- 

이것은 내가 현재 내가 라인 byte[] postBytes = Encoding.ASCII.GetBytes(post_data);에 중단 점을 넣어 postBytes 올바른 데이터를 포함

string post_data = "username=bob"; 
string uri = "https://abc.test.com/login/"; 

HttpWebRequest request = (HttpWebRequest) 
WebRequest.Create(uri); 
request.KeepAlive = false; 
request.ProtocolVersion = HttpVersion.Version10; 
request.Method = "POST"; 

byte[] postBytes = Encoding.ASCII.GetBytes(post_data); 

request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = postBytes.Length; 

Stream requestStream = request.GetRequestStream(); 

requestStream.Write(postBytes, 0, postBytes.Length); 

MessageBox.Show(postBytes.Length.ToString()); 
requestStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream()); 
string tmp = sr.ReadToEnd().Trim(); 

사용하고있는 코드입니다 ...하지만 출력을 두 번 얻습니다.

왜 이런 일이 발생합니까? 나는 분명히 희망한다.

답변

1

page에서 설명한대로 추적 구성을 설정하여 자세한 정보를 얻을 수있다. 귀하의 코드를 시도하면 다음과 같은 결과가 나타납니다.

System.Net Verbose: 0 : [2324] Data from ConnectStream#26756241::Write 
System.Net Verbose: 0 : [2324] 00000000 : 75 73 65 72 6E 61 6D 65-3D 62 6F 62    : username=bob 
System.Net Verbose: 0 : [2324] Exiting ConnectStream#26756241::Write() 

데이터가 ConnectStream에 올바르게 기록 된 것 같습니다. 다른 곳에서 뭔가 잘못 됐나요?

WebResponse 개체를 닫는 것을 잊지 마세요.

+0

안녕하세요 jiaji 우, 시간과 도움을 주셔서 감사합니다. 나는 닫는 webresponse 시도했다. 그러나 그것의 사본을 여전히 보내고있다. 예, 뭔가 다른 것 같아요 .. –

2

URI에서 호스트를 주소가 가능한 것으로 변경 한 후 (예 : http://adsf.com/login) 예상 한대로 작동하는 것으로 보입니다 (12 바이트 페이로드로 HTTP 포스트를 보냈습니다). 여기에 와이어 샤크에서 추적는 다음과 같습니다

Wireshark trace

당신은 내가 당신이 적어도 문제의 가능한 소스로 컴퓨터 나 코드를 배제 할 무엇을 얻을 참조하는 데 사용되는 URI를 시도 할 수 있습니다. 다른 URI를 사용할 때 문제가 사라지면 네트워크 장비와 웹 서버간에 문제가 발생할 수 있습니다 (역방향 프록시 구성, 웹 서버 구성, 네트워크 스위치 구성 등).

+0

안녕 Darwyn, 시간과 도움을 주셔서 감사합니다 ..이 새로운 URI를 시도하고, 지금, 내 exe는 올바른 데이터를 보냅니다 ...하지만 내가 발견 한 흥미로운 것은 실패 HTTPS 요청이있을 때만HTTP 링크에 대한 버프 한 tiem 만 .. snding 그래서 아무도 왜 HTTPS (보안) 연결에 대한 데이터가 중복됩니다 아이디어? HTTPS 사이트에 보내려고합니다. (지금 내 tquestion 편집) –

+0

HTTPS에서 실패합니다. HTTP에서 작동합니다. 불행히도 HTTPS URI에 게시하고 싶습니다 ... –

관련 문제