2015-01-01 4 views
0

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 ...하지만 오류의이 부분을 보지 않고

답변

1

는 눈에 띄는 :

Invalid redirect URI 

원래 POST 요청이 반환하지 않습니다 것을 의미한다 그 200이지만 301이고 리디렉션을 처리하는 서버가 귀하의 코드가 아니라 잘못된 URL을 생성하고 있습니다.

+0

예,이 예외는 DefaultRedirectHandler에 의해 제공됩니다. 공백이 문자열을 전달할 수있는 방법이 있습니까? 공백이 리디렉션 URL에 correctlly 전달되도록? HTML 페이지에 수동으로 액션을 입력하는 것이 올바로 작동하는 것을 볼 수 있습니다. – tjm1706

+0

잘 예외를 잡아서 위치 헤더를 꺼내서 확인한 후 인코딩 한 다음 새로운 요청을하십시오. 하지만 리디렉션 위치의 콘텐츠를 살펴 봐야한다고 생각합니다. API 또는 앱에 가입해야하는 것처럼 중요한 정보를 알려주고 있기 때문입니다. –

+0

OK - 정말 고마워요. 이 전략 (직접적인 새로운 요청)은 올바른 방법입니다. API - 매우 제한된 그룹에만 적용됩니다. 감사합니다. – tjm1706