HttpURLConnection setRequestMethod无法正常工作

时间:2015-06-25 12:50:58

标签: php android rest laravel-4 httpurlconnection

我尝试使用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;,所以我的代码出了问题。一切都适用于PUTGET http方法,它只会失败POST

我确认空体不是问题,因为我尝试了。

请问有人可以尝试我的代码吗?

我完全绝望了。我只问你,测试我的代码并指导我正确的方向,请...

1 个答案:

答案 0 :(得分:3)

你应该看看retrofit。这个lib会使你的api调用更加清晰,并避免在HttpURLConnection之上构建请求时遇到的所有问题。

编辑: 如果您想自己提出请求,请查看this帖子。问题与你的问题非常相似。您似乎需要在请求正文中发送数据。顺便通过标题发送参数不是一个好方法。我认为可能会有一些长度限制,你可能会遇到一些编码问题。

标题应该用于http相关信息或仅用于标记。 您应该使用body来发送数据。数据大部分时间是使用json / xml或httpurlencoded params发送的。

编辑2:

我尝试使用wamp服务器完全相同的代码,并且$ _SERVER ['REQUEST_METHOD']返回POST。所以也许这个问题来自你的服务器。尝试使用post man chrome plugin测试服务器api,以查看错误来自哪一方。