2010-02-18 2 views
10

인코딩 된 URL을 디코딩 할 때 HttpWebRequest에 문제가 있습니다. C#의 도움말 HttpWebRequest URI 인코딩이 끊어짐

var requestUrl = "https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; 
var request = (HttpWebRequest)WebRequest.Create(requestUrl); 

최종 요청 URL을보고있다가된다 :

https://www.google.com/webmasters/tools/feeds/http://www.example.com//crawlissues/

물론 400 잘못된 요청을 반환합니다. 나는 그것이 HttpWebRequest가 아니라 URI 클래스를 사용하여 수행 할 작업이라고 생각한다. 어떻게 이런 일이 일어나지 않게 할 수 있습니까?

+0

나를 위해 마법처럼 일이? 감사합니다. –

+0

URL은 https://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/으로되어 있습니다. 도메인이 인코딩되고 필요하다는 것을 알 수 있습니다. 머물러있게해라. –

답변

0

확실하지 않지만 HttpServerUtility.UrlEncode 방법이 도움이 될 수 있습니다.

업데이트. 또는 WebClient 클래스를 사용할 수 있습니다.

+2

고맙지 만 URL이 이미 인코딩 된 경우 문제는 무엇인가 그것을 디코딩한다는 것입니다. –

+0

WebClient 클래스를 사용해 보았지만 아무런 차이가 없습니다. –

1

나는 당신이 그 URL을 요청할 수 있다고 생각하지 않습니다 GET을 POST에서 요청 방법을 변경합니다.

쿼리 매개 변수에서 %2F을 디코딩하지 않습니다. 인코딩 된 데이터는 쿼리 매개 변수에 있다면 그래서, 그것은 작동합니다 :

requestUrl = "https://google.com/tools?feeds=http%3A%2F%2Fwww%2example%2Ecom%2F/crawlissues/"; 
var request = (HttpWebRequest)WebRequest.Create(requestUrl); 
4

이 열린 우리당 클래스의 짜증나는 "보안 기능"입니다. 4.0 이상을 사용하는 경우 turn it off in your configuration file; 그렇지 않으면 resort to reflection입니다.

+0

감사합니다, Richard! 나는이 사방 찾고 있었어요 - 마법처럼 다음 작품을 .NET 4.5 <이름 = "HTTP"genericUriParserOptions = "DontUnescapePathDotsAndSlashes"를 추가 />

+0

구성 4.6에서 파일을 비활성화 할 수도 있습니다. – r590

+0

@ r590 : 수정하십시오. 내가 "4.0 이상"이라고 말했어 야했지만, 게시했을 때 "4.0 또는 4.5"를 의미했습니다. :) –

1

var request=(HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(requestUrl)); 
request.Headers.Add("Content-Transfer-Encoding","binary"); 

에 훨씬 간단한 방법은 출력 URL이 무엇을 기대하고있다