我尝试使用Laravel 4制作的API,但是当我尝试创建新资源(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']);
并返回&#34; GET&#34;,所以我的代码出了问题。一切都适用于PUT
和GET
http方法,它只会失败POST
我确认空体不是问题,因为我尝试了。
请问有人可以尝试我的代码吗?
我完全绝望了。我只问你,测试我的代码并指导我正确的方向,请...
答案 0 :(得分:3)
你应该看看retrofit。这个lib会使你的api调用更加清晰,并避免在HttpURLConnection之上构建请求时遇到的所有问题。
编辑: 如果您想自己提出请求,请查看this帖子。问题与你的问题非常相似。您似乎需要在请求正文中发送数据。顺便通过标题发送参数不是一个好方法。我认为可能会有一些长度限制,你可能会遇到一些编码问题。
标题应该用于http相关信息或仅用于标记。 您应该使用body来发送数据。数据大部分时间是使用json / xml或httpurlencoded params发送的。
编辑2:
我尝试使用wamp服务器完全相同的代码,并且$ _SERVER ['REQUEST_METHOD']返回POST。所以也许这个问题来自你的服务器。尝试使用post man chrome plugin测试服务器api,以查看错误来自哪一方。