- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用由 Laravel 4 制作的 API rest,但是当我尝试创建新资源(store
,POST 方法)时,我得到了 index
的响应> 函数(GET 方法)。
我不知道我的代码发生了什么:
public static String sendInfo(HashMap<String, String> headers) {
URL url;
HttpURLConnection urlConnection = null;
StringBuilder stringBuilder = new StringBuilder();
try {
url = new URL(headers.get("URL"));
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod(headers.get("method"));
// Loop hashmap and apply headers
for (HashMap.Entry<String, String> entry : headers.entrySet()) {
// I only need the headers with real information. URL and method headers are only for the setRequestMethod and the object URL.
if (!entry.getKey().equals("URL") && !entry.getKey().equals("method")) {
urlConnection.addRequestProperty(entry.getKey(), entry.getValue());
}
}
if (urlConnection.getResponseCode() == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
reader.close();
} else {
Log.d("sendInfo", "ERROR " + headers.get("URL") + " STATE: " + urlConnection.getResponseCode());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
urlConnection.disconnect();
} catch (Exception e) {
e.printStackTrace();
Log.d("sendInfo", "ERROR DISCONNECT: " + e.getLocalizedMessage());
}
}
Log.d("RESPONSE", "SERVER RESPONSE: "+stringBuilder.toString());
return stringBuilder.toString();
}
我调用这个方法如下:
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("URL", "http://foo.com/api/person/");
headers.put("method", "POST");
headers.put("name", "Jason");
headers.put("lastname", "Harrison");
sendInfo(headers);
但是我没有进入我的 Laravel 资源的 store
函数,而是得到了 index
函数的响应。
我将这段代码放在我的 index
中以检查 http 方法:
dd("Index: ".$_SERVER['REQUEST_METHOD']);
并返回“GET”,所以我的代码有问题 。一切都适用于 PUT
和 GET
http 方法,只有 POST
才会失败
我确认空体不是问题,因为我尝试这样做。
有人可以试试我的代码吗?
我完全绝望了。我只问你,测试我的代码并指导我正确的方向,请...
最佳答案
你应该看看retrofit .这个库将使您的 api 调用更加清晰,并避免您在 HttpURLConnection 之上构建请求时遇到的所有问题。
编辑:如果您想自己提出请求,请查看 this邮政。这个问题和你的很相似。看来您需要在请求正文中发送数据。顺便说一句,通过 header 发送参数不是一个好方法。我认为可能会有一些长度限制,而且您可能会遇到一些编码问题。
header 应用于与 http 相关的信息或仅用于 token 。你应该使用 body 来发送你的数据。大部分时间使用 json/xml 或 httpurlencoded 参数发送数据。
编辑 2:
我用 wamp 服务器尝试了与您完全相同的代码,$_SERVER['REQUEST_METHOD'] 返回了 POST。所以这个问题可能来自您的服务器。尝试使用 post man chrome plugin 测试您的服务器 api看看你的错误来自哪一边。
关于php - HttpURLConnection setRequestMethod 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050918/
我有下一部分代码: dCon = (HttpURLConnection) new URL(torrentFileDownloadLink).openConnection(); dCon.setRequ
我写了一段代码来建立HttpsUrlConnection 和setRequestMethod 作为PUT。在调试时,我看到该方法为 GET。我的 SetRequestMethod 不工作。我不知道为什
我想将请求方法从 GET 更改为 POST。这是我的代码: HttpURLConnection connection = null; URL url = new URL("https://
我正在尝试使用由 Laravel 4 制作的 API rest,但是当我尝试创建新资源(store,POST 方法)时,我得到了 index 的响应> 函数(GET 方法)。 我不知道我的代码发生了什
我正在尝试使用 HttpURLConnection 将 Android 应用程序连接到静态服务器。 GET 请求成功,但 PUT 请求未成功。每个 PUT 请求都作为 GET 请求到达服务器。 @Ov
我目前正在尝试理解下面每个代码背后的逻辑。请告诉我我是否正确并回答我的困惑。 urlConnection = (HttpURLConnection) url.openConnection(); //c
我实在是为这件事抓狂了。 我尝试用 Java 发出 HTTP POST 请求,但它一直将其作为 GET 发送。我采用了几种不同的方式来发送 POST 请求,但所有这些方式最终都只是以 GET 方式发送
代码如下: String Surl = "http://mysite.com/somefile"; String charset = "UTF-8"; query = String.format("p
这是我的代码: String addr = "http://172.26.41.18:8080/domain/list"; URL url = new URL(addr); HttpURLConnec
自从更新到 Ice Cream Sandwich 后,我的 POST 请求不再有效。在 ICS 之前,这工作正常: try { final URL url = new URL("htt
我是一名优秀的程序员,十分优秀!