Solía OkHttp
recibir mensajes de texto de a URL
. La URL es una php
secuencia de comandos.
PHP
:
<?php
echo 'success';
?>
Lo hago con el siguiente código:
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();
}
Con un navegador, recibo el "éxito", pero en mi aplicación de Android, recibí una basura (POR FAVOR LEA COMPLETAMENTE):
Da un enlace (URL) que termina con:, ?i=1
así que agregué este parámetro con okhttp:httpUrlBuilder.addQueryParameter("i", "1");
Después de esto, recibí otra basura y ese enlace termina con:, ?i=2
intenté eso, ¡pero el servidor envió otra basura! Un enlace que termina en ?i=3
. Cuando probé esto, recibí ?i=4
y ... (El i
sube cada vez que envía una solicitud)
¿Qué está mal? ¿Por qué no puedo recibir ese mensaje de éxito?
¡Finalmente, se resolvió! Usé Android WebView
y CookieManager
para recibir el text/html
envío PHP
. Pasos: 1. un conjunto onPageFinished
de WebView
(la WebView
que no es visual). 2. Cargue su URL por WebView
. 3. Cuando se onPageFinished
invoca, utilícelo CookieManager
para obtener la cookie de esa URL. 4. Agregue esa cookie para solicitar encabezados.
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");
Notas:
1. Recibe el texto del cuerpo HTML, no el texto sin formato.
2. Este método pasa el testcookie-nginx-module , un sistema de verificación humana. Usamos cookies reales para hacer eso.
3. Debe agregar parámetros de consulta a la URL que carga con WebView
(agregar ?key=value
), pero no debe agregar esto a la URL que carga con OkHttp
(agregar con httpUrlBuilder.addQueryParameter("key", "value")
).
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras