代码在 Xamarin Android 中有效,但在 Java 中无效(HttpPost JSON)

Code works in Xamarin Android but doestn't work in Java (HttpPost JSON)

我开始在 Xamarin 中开发,然后觉得许可可能有点贵,所以我将我的代码转移到 java。

我有一个小块,它使用 JSON 对象执行 POST,它在 Xamarin 中工作,在 Java 中工作。

赛马林:

    var client = new HttpClient ();
    var content = new FormUrlEncodedContent(new Dictionary<string, string>() { 
        {"action", "getEpisodeJSON"},
        {"episode", "11813"}

    });
    client.DefaultRequestHeaders.Referrer = new Uri(link);

    var resp = client.PostAsync("http://www.ts.kg/ajax", content).Result;
    var repsStr = resp.Content.ReadAsStringAsync().Result;
    dynamic res = JsonConvert.DeserializeObject (repsStr);

Android:

    HttpClient httpclient = new DefaultHttpClient();

    // 2. make POST request to the given URL
    HttpPost httpPost = new HttpPost("http://www.ts.kg/ajax");

    String json = "";

    // 3. build jsonObject
    JSONObject jsonObject = new JSONObject();
    jsonObject.accumulate("action", "getEpisodeJSON");
    jsonObject.accumulate("episode", "11813");

    // 4. convert JSONObject to JSON to String
    json = jsonObject.toString();

    // 5. set json to StringEntity
    StringEntity se = new StringEntity(json);

    // 6. set httpPost Entity
    httpPost.setEntity(se);

    // 7. Set some headers to inform server about the type of the content
    httpPost.setHeader("Accept", "application/json");
    httpPost.setHeader("Content-type", "application/json");
    httpPost.addHeader("Referer", "http://www.ts.kg");

    // 8. Execute POST request to the given URL
    HttpResponse httpResponse = httpclient.execute(httpPost);

    // 9. receive response as inputStream
    InputStream inputStream = httpResponse.getEntity().getContent();

    // 10. convert inputstream to string
    String result;
    if(inputStream != null)
        result = convertInputStreamToString(inputStream);

在 Android 中制作这样一个 POST 的正确方法是什么?

UPD 当前的问题是我得到一个空的结果字符串;

    private static String convertInputStreamToString(InputStream inputStream) throws IOException{
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }

我最终通过 Fiddle 捕获了我设备的所有请求(这里是很好的教程:http://tech.vg.no/2014/06/04/how-to-monitor-http-traffic-from-your-android-phone-through-fiddler/

不同之处在于 cookie,因此我使用了 HttpContex 变量,如下所述: Android HttpClient Cookie

我也有一个不同的 Content-Type,所以我手动设置这个 header 如下:

httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");