получение cookies jsoup
при отправке запроса jsoup на сайт, хочу получить cookies, но проблема в том, что один из cookies имеет странное значение и, соответственно, дальнейшая работа с данными куками неудачна, хотя через инспектор в браузере в Network показывает что все три куки имеют точное значение, запросы пытаюсь отправлять на сайт https://eios.kesip.ru/login/index.php, в чём может быть проблема?
Connection.Response response = Jsoup.connect("https://eios.kesip.ru/login/index.php")
.userAgent(user_agent)
.followRedirects(true)
.method(Connection.Method.GET)
.execute();
Map<String, String> coky = response.cookies();
System.out.println(coky);
данный вывод отдаст значение следующего типа:
{MoodleSession=83f2771f3f18096492d86cf6b75760e0, MoodleSessionTest=PHCP58EDqH, MOODLEID1_=deleted}
И вот параметр MOODLEID1_ имеет значение deleted, хотя Network в браузере показывает значение отличное от deleted, что с этим можно сделать или где я допускаю ошибку? Заранее спасибо
Ответы (1 шт):
Как вариант могу предложить воспользоваться не Jsoup а OkHttp. Для начала я проверил что у вас сайт и правда что-то выдает нужно через Postman:
дальше добавляем в build.gradle зависимость:
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
и посылаем запрос:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
CoroutineScope(Dispatchers.Main).launch {
val result = isInternetAvailable()
println(result!!.headers.get(name = "Set-Cookie"))
}
}
private suspend fun someFunction(): Response? {
return withContext(Dispatchers.IO){
try {
val client = OkHttpClient().newBuilder()
.build()
val request: Request = Request.Builder()
.url("https://eios.kesip.ru/login/index.php")
.method("GET", null)
.build()
return@withContext client.newCall(request).execute()
} catch (e: Exception) {
println("within exception$e")
return@withContext null
}
}
}
что на выходе выдает нам:
MOODLEID1_=%25B5%2589%25D6%25CC%25D6%25CD;
но это пример на kotlin, а вот пример на Java:
new Thread(() -> {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://eios.kesip.ru/login/index.php")
.get()
.build();
try {
Response response = client.newCall(request).execute();
System.out.println(response.header("Set-Cookie"));
} catch (IOException e) {
e.printStackTrace();
}
}).start();
ответ выдается такой же.
UPDATE
Чтобы отправить в запросе json, можно сделать так:
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("KEY1", "VALUE1");
jsonObject.put("KEY2", "VALUE2");
} catch (JSONException e) {
e.printStackTrace();
}
val client = OkHttpClient()
val mediaType = "application/json; charset=utf-8".toMediaType()
val body = jsonObject.toString().toRequestBody(mediaType)
val request: Request = Request.Builder()
.url("https://YOUR_URL/")
.post(body)
.build()
var response: Response? = null
try {
response = client.newCall(request).execute()
val resStr = response.body!!.string()
} catch (e: IOException) {
e.printStackTrace()
}
что тоже нужно выполнять в отдельном треде ввиду ассинхронности. В примере то что вам нужно находится в jsonObject только поля и значения подставляйте свои.
