java - Okhttp - java,从响应中获取 url 的问题
问题描述
我正在尝试登录名为 Stockx ( http://stockx.com/login ) 的网站。要发送适当的请求,我需要来自响应(fetchstate)标头或 url 的 state 和 clientID。ClientID 没问题,但状态应如下所示:
hKFo2SBTb0hLMENwUHFIWXlLcTVRaTU2RUduMkR6T2NnMXFhcqFupWxvZ2luo3RpZNkgdnY2emVyNjdzU1o0ekI4YV9RQll2Q3lvVWNld3B5TV-jY2lk2SBPVnhydDRWSnFUeDdMSVVLZDY2MVcwRHVWTXBjRkJ5
但我的代码总是给出:%7B%7D
这是我的代码
public class Stockx_login {
String email;
String password;
OkHttpClient client;
CookieJar cookieJar;
public Stockx_login(String email, String password) throws IOException {
this.email = email;
this.password = password;
this.cookieJar = new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, @NotNull List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<>();
}
};
this.client = new OkHttpClient.Builder()
.cookieJar(cookieJar)
.followRedirects(true)
.build();
Request request = new Request.Builder().url("https://stockx.com/").build();
client.newCall(request).execute();
}
public void fetchState() throws IOException{
String endpoint = "https://stockx.com/login";
Request request = new Request.Builder().url(endpoint)
.addHeader("Host", "stockx.com")
.addHeader("upgrade-insecure-requests", "1")
.addHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36")
.addHeader("sec-fetch-mode", "navigate")
.addHeader("sec-fetch-user", "?1")
.addHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.addHeader("sec-fetch-site", "none")
.addHeader("accept-language", "pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7")
.build();
Response response = client.newCall(request).execute();
if (response.code()==200) {
String referrer = response.toString();
String state = referrer.split("state=")[1].split("&")[0];
String clientID = referrer.split("client_id=")[1].split("&")[0];
System.out.println(state);
}
}
}
解决方案
推荐阅读
- java - 在我的公共汽车上无法容纳适量的人
- php - 我无法通过 powershell 终端上的迁移命令显示我的数据库表(Windows 10)
- c++ - 什么是 protobuf CodedInputStream / CodedOutputSteam 以及如何在 C++ 中使用它?
- woocommerce - 特定 WooCommerce 属性值作为列表项
- angular - Spring Security 和 Angular 官方教程 Angular 部分无法编译
- html - 在 Firefox 打印上看不到表格边框
- php - 谷歌文档查看器在 php 中显示“没有可用的预览”
- c++ - reinterpret_cast 发送的数据
- javascript - 如何使滑块自动移动?
- javascript - 如何显示字符串中的第二个数组来自 .split()