get-request 매개 변수로 HTML을 보내는 방법은 무엇입니까?
-
22-07-2019 - |
문제
apaches httpclient와 함께 이와 같은 GET 요청과 함께 HTML 문자열을 보내고 싶습니다.
http://sample.com/?html=<html><head>...
이것은 현재 작동하지 않습니다. 인코딩 문제라고 생각합니다. 그렇게하는 방법이 있습니까?
method.setQueryString(new NameValuePair[] {new NameValuePair("report", "<html>....")});
client.executeMethod(method)
이것은 실패합니다 org.apache.commons.httpclient.NoHttpResponseException: The server localhost failed to respond
. 내가 교체하면 "<html>"
"테스트 .."에 의해 잘 작동합니다.
편집하다
인코딩 후 URL 길이의 문제가되며 서버는 긴 URL을 제외하고는 그렇지 않습니다. 우편으로 보내면 문제가 해결됩니다.
해결책
URL 인코딩을 사용하여 먼저 HTML 문자열을 포맷하십시오.
String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});
다른 팁
주어진 콘텐츠의 길이에 따라 Base64 인코딩 및 아마도 압축을 사용하기 전에는 다음과 같습니다.
RFC 2068 상태 : 일부 이전 클라이언트 또는 프록시 구현이 이러한 길이를 제대로 지원하지 않을 수 있으므로 서버는 255 바이트를 초과하는 URI 길이에 따라 조심해야합니다. URL 길이의 사양은 최소 또는 최대 URL 길이를 지시하지 않지만 구현은 브라우저에 따라 다릅니다. Windows : Opera는 ~ 4050 문자를 지원하며, 예를 들어 4.0+는 정확히 2083 자, Netscape 3-> 4.78 지원을 지원하기 전에 최대 8192 자까지 지원하며 Netscape 6은 시작시 오류를 일으키기 전에 ~ 2000을 지원합니다.
HTML 문자열에는 URL 인코딩 해야하는 문자가 포함되어 있습니다. 읽다 여기.
인코딩을 할 수 있습니다 urlutils.simpleformurlencode