HttpPost 요청을 사용할 때 적절한 인코딩을 위해 UTF-8을 사용합니다. 매개 변수 중 하나에서 공백을 사용할 때 여전히 다음과 같은 오류가 발생합니다.공백을 포함한 HttpPost 요청이 실패합니다.
발생 원인 : org.apache.http.ProtocolException : 잘못된 리디렉션 URI : /seek/nearest.aspx?key=Miami vice & ex = 0 & cFilter = 9a79e6ce-3344-409c-bbe9-496530baf758 & 어린이 = N
URL에 유효하지 않은 문자는 "마이애미"과 "반대"사이의 공간입니다.
흠, 나는 POST 요청을 URL 문자열에 넣지 않았다고 생각했습니다.
다음은 HttpPost 요청을 작성하는 단계입니다. "mKeyword"에는 "Miami vice"라는 문자열이 있습니다.
- 1 NameValue 목록에서 요청 넣어 : POST 요청
HttpPost method = new HttpPost(theUri);
method.addHeader("User-Agent", "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0) Firefox/7.0");
method.addHeader("Pragma", "no-cache");
method.addHeader("Content-Type", "application/x-www-form-urlencoded");
method.addHeader("Accept-Language", "en");
4를 구축 - - - - - URI를
String search_url = "http://www.example.com/seek/nearest.aspx";
try {
theUri = new URI(search_url);
} catch (URISyntaxException e) { etc.
3를 구축
List<NameValuePair> kwNvP = new ArrayList<NameValuePair>();
kwNvP.add(new BasicNameValuePair("ctl00$ContentBody$LocationPanel1$OriginText", mKeyword));
2 구축을 콘텐츠 개체
HttpEntity entity = null;
try {
entity = new UrlEncodedFormEntity(kwNvP, HTTP.UTF_8);
}
catch (UnsupportedEncodingException e) { etc
5 -
method.setEntity(entity);
HttpResponse res2 = null;
try {
Thread.sleep((int) (1000 * GeoTools.random(0.1, 0.3)));
res2 = client2.execute(method);
Log.v(WaypointActivity.TAG, "Status line = " + String.valueOf(res2.getStatusLine()));
} catch (Exception e) {
// --> Coming here ... see the exception trace
당신이 날이 문제를 해결하는 데 도움이 수 요청을 실행? 전체 프로그램이나 나는 100 % 확실하지 않다 실제 대상 URL ...하지만 오류의이 부분을 보지 않고
예,이 예외는 DefaultRedirectHandler에 의해 제공됩니다. 공백이 문자열을 전달할 수있는 방법이 있습니까? 공백이 리디렉션 URL에 correctlly 전달되도록? HTML 페이지에 수동으로 액션을 입력하는 것이 올바로 작동하는 것을 볼 수 있습니다. – tjm1706
잘 예외를 잡아서 위치 헤더를 꺼내서 확인한 후 인코딩 한 다음 새로운 요청을하십시오. 하지만 리디렉션 위치의 콘텐츠를 살펴 봐야한다고 생각합니다. API 또는 앱에 가입해야하는 것처럼 중요한 정보를 알려주고 있기 때문입니다. –
OK - 정말 고마워요. 이 전략 (직접적인 새로운 요청)은 올바른 방법입니다. API - 매우 제한된 그룹에만 적용됩니다. 감사합니다. – tjm1706