【发布时间】:2021-07-11 00:22:34
【问题描述】:
我正在尝试登录名为 Stockx (http://stockx.com/login) 的网站。要发送适当的请求,我需要来自响应 (fetchstate) 标头或 url 的 state 和 clientID。 ClientID 没问题,但状态应如下所示:
hKFo2SBTb0hLMENwUHFIWXlLcTVRaTU2RUduMkR6T2NnMXFhcqFupWxvZ2luo3RpZNkgdnY2emVyNjdzU1o0ekI4YV9RQll2Q3lvVWNld3B5TV-jY2lk2SBPVnhydDRWSnFUeDdMSVVLZDY2MVcwem>pTXBjVRLZDY2MVcwem>pTXBJRkRA
但我的代码总是给出:%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);
}
}
}
【问题讨论】:
-
referrer字符串取回后是什么样子的? -
Response{protocol=h2, code=200, message=, url=https://accounts.stockx.com/authorize?response_type=code&client_id=OVxrt4VJqTx7LIUKd661W0DuVMpcFByD&connection=production&redirect_uri=https%3A%2F%2Fstockx.com%2Fcallback%3Fpath%3D%2F&state=%7B%7D&stockx-session-id=&stockx-default-tab=login&stockx-is-gdpr=&stockx-language=en&stockx-currency=USD&stockx-url=https%3A%2F%2Fstockx.com&audience=gateway.stockx.com&stockx-user-agent=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F89.0.4389.128%20Safari%2F537.36}