【问题标题】:Okhttp - java, issue with getting url from responseOkhttp - java,从响应中获取 url 的问题
【发布时间】: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&amp;client_id=OVxrt4VJqTx7LIUKd661W0DuVMpcFByD&amp;connection=production&amp;redirect_uri=https%3A%2F%2Fstockx.com%2Fcallback%3Fpath%3D%2F&amp;state=%7B%7D&amp;stockx-session-id=&amp;stockx-default-tab=login&amp;stockx-is-gdpr=&amp;stockx-language=en&amp;stockx-currency=USD&amp;stockx-url=https%3A%2F%2Fstockx.com&amp;audience=gateway.stockx.com&amp;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}

标签: java request okhttp


【解决方案1】:

你能发布你为推荐人获得的价值吗?

but my code always gives: %7B%7D

您可能必须使用URLDecoder.decode

【讨论】:

  • Response{protocol=h2, code=200, message=, url=https://accounts.stockx.com/authorize?response_type=code&amp;client_id=OVxrt4VJqTx7LIUKd661W0DuVMpcFByD&amp;connection=production&amp;redirect_uri=https%3A%2F%2Fstockx.com%2Fcallback%3Fpath%3D%2F&amp;state=%7B%7D&amp;stockx-session-id=&amp;stockx-default-tab=login&amp;stockx-is-gdpr=&amp;stockx-language=en&amp;stockx-currency=USD&amp;stockx-url=https%3A%2F%2Fstockx.com&amp;audience=gateway.stockx.com&amp;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}
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 2015-09-11
  • 2015-08-26
  • 2017-08-30
  • 1970-01-01
相关资源
最近更新 更多