2015-01-23 2 views
0

System.Net.WebRequest를 사용하여 간단한 GET 요청을 보내려고합니다. 하지만 "Space"문자가 포함 된 URL을 보내려고 할 때 문제가 있습니다. 내가 무엇을 :System.Net.HttpWebRequest를 사용하여 데이터 요청을 보내는 방법

다음
string url = "https://example.com/search?text=some words&page=8"; 
var webRequest = System.Net.WebRequest.Create(link) as HttpWebRequest; 

내가이 코드를 사용하려고하면
webRequest.Address == "https://example.com/search?&text=some words&page=8" (# 1)

내가 수동으로 urlencoded로 공간을 "% 20"을 추가 할 수 있지만 "이 WebRequest.Create"디코딩을 그것, 그리고 다시 (# 1). 어떻게해야할까요?

P. 미안하다.

답변

1

공백 대신에 더하기 기호 (+)를 사용하십시오. 또한 첫 번째 앰퍼샌드 (&); 비 기본 인수에서만 사용됩니다. 예 :

var url = "https://example.com/search?text=some+words&page=8"; 
+0

작동하지 않습니다. 결과 : webRequest.Address == "http://exmple.com/index.php?some+words" – Vladislav

+0

아, 죄송하지만 서버에서 허용합니다. 고맙습니다 =) – Vladislav

1

"url-friendly"매개 변수 값을 지정해야합니다. 이를 위해 HttpUtility.UrlEncode()를 사용하여 값을 "url-encode"해야합니다. 이것은 공간뿐만 아니라 다른 많은 위험한 "단점"을 수정합니다 :

string val1 = "some words"; 
string val2 = "a <very bad> value & with specials!"; 
string url = "https://example.com/search?text=" + HttpUtility.UrlEncode(val1) + "&comment=" + HttpUtility.UrlEncode(val2); 
+0

예 (HttpUtility.UrlEncode())는 공백과 다른 것을 인코딩하지만 "WebRequest.Create (link)"는 % 20을 공백으로 디코딩합니다. =) 나는 논리를 이해하지 못합니다 ... – Vladislav

+1

Don ' "인터넷 URL"과 "페이지 매개 변수"의 차이점을 알고 있다면 인터넷 URL (실행해야하는 "실행 파일의 전체 경로"와 같은 것으로 생각하십시오)에 공백이 없으면 다음과 같이하십시오. (본질적으로 프로그램 "명령 줄 매개 변수"와 같은) 매개 변수는 공백을 매핑하는 데 "UrlEncode"를 사용하여 올바르게 인코딩해야하지만 이른바 "HttpEncode"와 % 20 (공백의 16 진수 값, % 20 = 32) "+"기호) 및 기타 "비표준"문자를 포함 할 수 있습니다. 그래서 두 가지 유형의 인코딩이 필요합니다. 당신이 분명하다면, 내 대답을 "올바른"것으로 생각하기를 바랍니다. :-) –