我正在尝试在AsyncTask中发出POST请求,但是请求方法始终保持为GET。
我遇到了这个问题,因为我将HTTP请求移到了AsyncTask,当时它在UI线程中时,以前的代码是相同的。
doInBackground代码如下:
protected String doInBackground(String... string) {
httpPostToArduino (string[0]);
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute ();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute (s);
}
public void httpPostToArduino(String message){
curArd1UrlString="http://myprivateurl.com";
URL url = null;
try {
url = new URL (curArd1UrlString);
} catch (MalformedURLException e) {
e.printStackTrace ();
}
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
StringBuilder result = new StringBuilder (); //test
try {
urlConnection = (HttpURLConnection) url.openConnection ();
//Set header content
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Authorization","password");
urlConnection.setDoOutput(true);
//Set body content
OutputStreamWriter os = new OutputStreamWriter (urlConnection.getOutputStream());
os.write(message.toString ());
os.flush();
InputStream in = new BufferedInputStream (urlConnection.getInputStream ());
reader = new BufferedReader (new InputStreamReader (in));
//Read the first line of the response - just the JSON
result.append (reader.readLine ());
//The below WHILE reads all the content of the response message, but we only need the first line
String ReceivedJSON = result.toString ();
JSONObject parentObject = new JSONObject (ReceivedJSON);
在调试器的urlConnection下,对于方法字段,该字段始终为GET。下面是调试器模式的片段,更加清晰。
每个请求后都会收到响应,但是响应取决于POST请求的正文内容。
为了将请求方法更改为POST,我应该在代码中进行哪些更改?
答案 0 :(得分:0)
我遇到了同样的问题,因为我没有指定完整的URL路径,所以发生了这个问题。
有两种方法可以解决此问题。第一种方法是指定full url
(末尾为file.php
),第二种方法是在Web服务器配置中指定rewrite
的网址。
我通过rewriting
网络服务器中的URL对其进行了修复。这是给nginx
的。
这会将.php添加到请求的URL的末尾。
location /api {
rewrite ^(/api/.*)/(\w+) $1/$2.php last;
}
例如,您拥有Url http://example.com/api/v1/file。指定重写后,该URL将被重写为http://www.example.com/api/v1/file.php