我使用OkHttp
从URL
接收文本。该网址是一个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应用中,我收到了垃圾消息(请完整阅读):
它提供了一个以(?i=1
结尾的链接(URL),因此我在okhttp:httpUrlBuilder.addQueryParameter("i", "1");
此后,我收到了另一个垃圾,该链接的结尾是:?i=2
,我尝试了一下,但是服务器发送了另一个垃圾!以?i=3
结尾的链接。尝试此操作后,我收到了?i=4
和...({{1}每次发送请求时都会上升)
怎么了?为什么我不能收到该成功消息?
答案 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 WebView
和CookieManager
来获取text/html
发送的PHP
。
脚步:
1.在onPageFinished
上设置WebView
(WebView
不是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}})。