Java到PHP - 返回JSON但接收HTTP 406响应

时间:2014-01-05 21:42:52

标签: java php json http

我正在努力处理一些在我的localhost上正确执行的Java代码,但是,当通过我的Web服务器执行时,HTTP响应失败了406。我试图阅读406错误代码,但是,我坚持认为代码在本地工作正常。代码的目的是通过HTTP向Web服务器发送请求以执行后端PHP程序。 HTTP请求不需要参数。 PHP程序从SQL数据库中检索一些数据,并通过JSON将其返回给Java程序。这在本地运行时工作正常(例如,通过“localhost”)。这是代码的最新版本......

//  preparation
String charset = "UTF-8";
String szURL = new String ();
int responseCode = 0;

if (!debugConfiguration)
    szURL = "https://secure.justhost.com/xxxx.php";  // removed actual file name
else
    szURL = "http://localhost/xxxx.php";             // removed actual file name
//  HTTP Post request
URL object = null;
try 
    {
    object = new URL(szURL);
    }
catch (MalformedURLException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

//xxxHttpsURLConnection con = null;
HttpURLConnection con = null;
try 
    {
    //xxxcon = (HttpsURLConnection) object.openConnection();
    con = (HttpURLConnection) object.openConnection();
    }
catch (IOException e)
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

//add request header
try 
    {
    //xxxcon.setRequestMethod("POST");
    con.setRequestMethod("GET");
    }
catch (ProtocolException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

//con.setRequestProperty("Accept-Charset", charset);
//con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
//con.setRequestProperty("User-Agent", USER_AGENT);
//con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");

// Send post request
con.setDoOutput(true);

DataOutputStream wr = null;
try 
    {
    wr = new DataOutputStream (con.getOutputStream());
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
try 
    {
    wr.close();
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

try 
    {
    responseCode = con.getResponseCode();
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

BufferedReader in = null;
try 
    {
    in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

String inputLine;
StringBuffer response = new StringBuffer();

try 
    {
    while ((inputLine = in.readLine()) != null)
        {
        response.append(inputLine);
        }
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

try 
    {
    in.close();
    }
catch (IOException e) 
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

Gson gson = new Gson ();    
jsonArticleCategories[] enums = gson.fromJson(response.toString(), jsonArticleCategories[].class);
for (int i=0; i<enums.length; ++i)
    {
    jsonArticleCategories jac = enums[i];
    cats.add(jac.get_category());
    }

正如您从代码中看到的那样,我已经尝试了几种参数等等。我可能会遗漏一些非常基本的东西,但是,我只是没有看到它。也许我一直在盯着代码太久了。如果有人可以指出我的缺陷,我将非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

NotAcceptable意味着请求的格式(例如JSON)是服务器无法处理的。相当一部分Java框架通过查看是否有可用于处理它们的库来自动获取和处理消息类型,也许PHP正在做类似的事情?

使用Rest测试工具,您可以尝试自己发送请求,并专注于让服务器端使用它,然后只在此之后添加客户端代码的复杂性。

如果你使用firefox https://addons.mozilla.org/en-US/firefox/addon/restclient/reviews/是好的。我确定其他浏览器有类似的东西,但我自己没有使用它们。

答案 1 :(得分:0)

对于所有有类似问题的人。我能够在Tim B的建议的帮助下解决这个问题,使用Rest测试工具来深入研究我的问题的HTTP方面。这让我对正在发生的事情有所了解。然后我偶然发现了this StackOveflow post,它通过我的applet代码向我发送的属性提供了更多的亮点。我现在有applet代码调用php代码并返回json数据。感谢所有提供帮助。