我想创建像这样的HttpPost请求:
http://site/searches.json -d"search[params_attributes[origin_name]=MOW"\ -d"search[params_attributes][destination_name]=IEV"\ -d"search[params_attributes[some]=SOME"
我亲手试过 - 工作正常。 但我有错误:
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 43: http://somesite/searches.json -d"search[params_attributes][origin_name]=KBP"...
at java.net.URI.create(URI.java:776)
at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)
它说错误在第一个空间位置。 有什么想法吗?
编辑:
我试过了:
mMethodURI = URLEncoder.encode(mMethodURI, "UTF-8");
得到:
Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters.
at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:572)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
答案 0 :(得分:0)
尝试使用
URLEncoder.encode(url);
URLDecoder.decode(url);
对您的网址进行编码和解码。
尝试使用以下代码,并确保在清单文件中设置所有权限。
public String executeUrl(String url, Context context)
{
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse;
String result = null;
try
{
httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null)
{
InputStream inputStream = httpEntity.getContent();
result = Parser.convertStreamToString(inputStream);
inputStream.close();
}
}
catch(UnknownHostException eUnknownHostException)
{
eUnknownHostException.printStackTrace();
result = null;
}
catch(ConnectTimeoutException eConnectTimeoutException)
{
// TODO: handle exception
}
catch(Exception exception)
{
exception.printStackTrace();
result = null;
}
return result;
}
private String convertStreamToString(InputStream ipStream)
{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ipStream), 8192);
StringBuilder stringBuilder = new StringBuilder();
String line = null;
try
{
while((line = bufferedReader.readLine()) != null)
{
stringBuilder.append(line + "\n");
}
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
finally
{
try
{
ipStream.close();
}
catch(IOException ioException)
{
ioException.printStackTrace();
}
}
return stringBuilder.toString();
}