使用HttpPost请求时,我使用UTF-8进行正确的编码。当我在其中一个参数中使用空格时,我仍然会收到以下错误:
引起:org.apache.http.ProtocolException:无效的重定向URI:/seek/nearest.aspx?key=Miami vice&amp; ex = 0&amp; cFilter = 9a79e6ce-3344-409c-bbe9-496530baf758&amp; children = n < / p>
网址中的无效字符是&#34; Miami&#34;之间的空格。和#34;副&#34;。
嗯,我以为POST请求没有放在URL字符串中。
这些是我构建HttpPost请求的步骤。在&#34; mKeyword&#34;是&#34; Miami Vice&#34;的字符串。
1 - 将请求放在NameValue列表中:
List<NameValuePair> kwNvP = new ArrayList<NameValuePair>();
kwNvP.add(new BasicNameValuePair("ctl00$ContentBody$LocationPanel1$OriginText", mKeyword));
2 - 构建URI
String search_url = "http://www.example.com/seek/nearest.aspx";
try {
theUri = new URI( search_url);
} catch ( URISyntaxException e) { etc.
3 - 构建帖子请求
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 - 构建内容实体
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
你能帮我解决这个问题吗?
答案 0 :(得分:1)
如果没有看到完整的程序或真正的目标网址,我不是100%确定......但错误的这一部分很突出:
Invalid redirect URI
这意味着您的原始POST请求不会返回200但是301,并且处理重定向的任何服务器都会创建格式错误的URL,而不是您的代码。