Android-无法从PHP接收数据

时间:2018-10-26 12:59:05

标签: php android http text echo

我使用OkHttpURL接收文本。该网址是一个php脚本。

PHP

<?php
    echo 'success';
?>

我可以通过以下代码进行操作:

OkHttpClient hc = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .readTimeout(10, TimeUnit.SECONDS)
    .writeTimeout(10, TimeUnit.SECONDS)
    .build();
String url = "http://hadifaridhadi.vcn.ir/com.hfapp.rokatshomar/imgofday.php";
HttpUrl.Builder httpUrlBuilder = HttpUrl.parse(url).newBuilder();
httpUrlBuilder.addQueryParameter("i", "3");
Request request = new Request.Builder()
    .url(httpUrlBuilder.build())
    .build();
Response response = null;
try {
    response = hc.newCall(request).execute();
} catch (Throwable e) {
    e.printStackTrace();
}
if (response != null) {
    result = response.body().string();
}

使用浏览器,我收到“成功”消息,但是在我的Android应用中,我收到了垃圾消息(请完整阅读):

enter image description here

它提供了一个以(?i=1结尾的链接(URL),因此我在okhttp:httpUrlBuilder.addQueryParameter("i", "1");

中添加了此参数

此后,我收到了另一个垃圾,该链接的结尾是:?i=2,我尝试了一下,但是服务器发送了另一个垃圾!以?i=3结尾的链接。尝试此操作后,我收到了?i=4和...({{1}每次发送请求时都会上升)

怎么了?为什么我不能收到该成功消息?

2 个答案:

答案 0 :(得分:0)

您将返回text/html,这是PHP的默认设置。显然,浏览器呈现了您应该看到的内容,但实际上,浏览器收到的响应具有完整的HTML。

也许改为发送JSON?

header('Content-Type: application/json');
echo json_encode(['message' => 'success']);
exit;
  

更新好了,您现在发送JSON,但值得注意的是仍然得到了所有的垃圾!

为您的Android代码尝试此操作:

OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url('http://hadifaridhadi.vcn.ir/com.hfapp.rokatshomar/imgofday.php')
      .build();

  Response response = client.newCall(request).execute();
  return response.body().string();
}

答案 1 :(得分:0)

最后,它解决了! 我使用Android WebViewCookieManager来获取text/html发送的PHP。 脚步: 1.在onPageFinished上设置WebViewWebView不是VISUAL)。 2.通过WebView加载URL。 3.调用onPageFinished时,使用CookieManager获取该URL的cookie。 4.将该Cookie添加到请求标头中。

WebView myWebView = new WebView(MainActivity.this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        final String cookies = CookieManager.getInstance().getCookie("http://hadifaridhadi.vcn.ir/com.hfapp.rokatshomar/imgofday.php?req=hasimg");                                                                                           
        try {
            myWebView.destroy();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                String result = "";
                try {
                    OkHttpClient hc = new OkHttpClient.Builder()
                            .connectTimeout(10, TimeUnit.SECONDS)
                            .readTimeout(10, TimeUnit.SECONDS)
                            .writeTimeout(10, TimeUnit.SECONDS)
                            .build();
                    String url = "http://hadifaridhadi.vcn.ir/com.hfapp.rokatshomar/imgofday.php";
                    HttpUrl.Builder httpUrlBuilder = HttpUrl.parse(url).newBuilder();
                    httpUrlBuilder.addQueryParameter("req", "hasimg");
                    Request request = new Request.Builder()
                            .url(httpUrlBuilder.build())
                            .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
                            .addHeader("Cookie", cookies + "; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/")
                            .build();
                    Response response = null;
                    try {
                        response = hc.newCall(request).execute();
                    } catch (Throwable e) {
                        e.printStackTrace();
                    }
                    if (response != null && response.isSuccessful()) {
                        result = response.body().string();
                    }
                } catch (Throwable e) {
                    e.printStackTrace();
                }
                // WE RECEIVED THE TEXT IN HTML (mine is 'yes')
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }}).start();
    }
}
myWebView.loadUrl("http://hadifaridhadi.vcn.ir/com.hfapp.rokatshomar/imgofday.php?req=hasimg");

注意:

1。这样会接收HTML正文文本,而不是纯文本。

2。此方法通过了testcookie-nginx-module(人工检查系统)。我们使用真正的Cookie来做到这一点。

3。您应该将查询参数添加到使用WebView加载的URL(添加?key=value)上,但是不应该将其添加到使用OkHttp加载(使用{{ 1}})。