我正在尝试将JSON消息发布到站点并返回JSON消息 java.net.ProtocolException:方法不支持请求体:POST 有谁知道什么是错的?提前致谢
HttpURLConnection conn=null;
try{
URL url=new URL(urlString);
String userPassword = userName +":" + passWord;
byte[] bytes=Base64.encode(userPassword.getBytes(),Base64.DEFAULT);
String stringEncoding = new String(bytes, "UTF-8");
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty ("Authorization", "Basic " + stringEncoding);
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
Log.i("Net", "length="+conn.getContentLength());
Log.i("Net", "contentType="+conn.getContentType());
Log.i("Net", "content="+conn.getContent());
conn.connect();
}catch(Exception e){
Log.d("Url Formation Connection", e.toString());
}
//输出{ 尝试{
String requestString="{“ ";
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(requestString.toString());
wr.flush();
//input{
BufferedReader rd = null;
String response=" ";
is = conn.getInputStream();
rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer responseBuff = new StringBuffer();
while ((line = rd.readLine()) != null) {
// Process line...
responseBuff.append(line);
}
response = responseBuff.toString();
Log.d("response", response);
}catch(Exception e){
Log.d("buffer error", e.toString());
}finally {
if (is != null) {
try {
wr.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:3)
可能是您连接的服务器不允许POST操作。我会先尝试一个GET请求,看看你是否拥有该Web服务方法的权限。
另外,你可以尝试使用更简单的HttpClient,虽然我自己没有测试过这个解决方案:http://www.geekmind.net/2009/11/android-simple-httpclient-to.html
答案 1 :(得分:1)
只是一个猜测,但你可以尝试设置:
conn.setDoOutput(false);
文档说:“可选择上传请求正文。如果实例包含请求正文,则必须使用setDoOutput(true)配置实例。” HttpURLConnection
由于你体内没有任何东西,不妨将它设置为假。
答案 2 :(得分:0)
Android针对setRequestMethod的文档很少,但是您的错误指出 POST 不是有效的方法。请尝试改为使用 PUT :
conn.setRequestMethod("PUT");
有关您可能需要进行的任何调整,请参阅this post。