HttpURLConnection 在发送 GET 请求后返回响应代码 500,即使它在本地工作

艺术的

我正在尝试发送 HTTP GET 请求以从服务器下载文件,作为 Selenium 测试用例的一部分。

如果我通过任何浏览器在本地执行它,它会工作并返回 HTTP OK 200,并且文件被下载,但是当我尝试使用HttpURLConnection发送任务时它不会。

我正在使用的方法:

    static sendGET(String URL){
        URL obj = new URL(URL)
        CookieHandler.setDefault(new CookieManager())
        Authenticator.setDefault (new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication ("login", "password".toCharArray());
            }
        })
        HttpURLConnection con = (HttpURLConnection) obj.openConnection()
        HttpURLConnection.setFollowRedirects(true)
        con.setRequestMethod("GET")
        con.setRequestProperty("User-Agent", "Mozilla/5.0")
        int responseCode = con.getResponseCode()
        System.out.println("GET Response Code :: " + responseCode)
        return responseCode
    }

获取响应代码 :: 500

从服务器日志我得到:

CRITICAL 08:51:39   php     Call to a member function getId() on null

{
    "exception": {}
}

调用 getId() 的行:@AndiCover

$response = $transmitter->downloadFile($fileID, $this->getUser()->getId());

这使得用户身份验证似乎存在问题。

我也尝试使用 HttpGet 类,但结果是一样的。

艺术的

发现一个问题,就这样吧。

那么,问题是什么?结果我的请求缺少可以验证用户身份的 Cookie 标头,具体来说它是 PHPSESSID。为了获取当前的 PHPSESSID,我创建了一个方法来检索所有 cookie,然后将 PHPSESSID 子字符串化:

static getPhpSessionID(){
    String cookies = driver.manage().getCookies()
    System.out.println("Cookies: ${cookies}")
    cookies = cookies.substring(cookies.lastIndexOf("PHPSESSID=") + 10)
    cookies = cookies.substring(0, cookies.indexOf(";"))
    System.out.println("${cookies}")
    return cookies
}

首先它打印所有的cookies:

Cookies: [PHPSESSID=2ohpfb3jmhtddcgx1lidm5zwcs; 路径=/;域=域.com]

然后它子字符串 PHPSESSID:

2ohpfb3jmhtddcgx1lidm5zwcs

之后,我需要修改我的 sendGET 方法:

String sessionID = getPhpSessionID()
con.setRequestProperty("Cookie", "PHPSESSID=${sessionID}")

结果是:

获取响应代码 :: 200

希望它可以帮助未来的人:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

即使httpCon.setRequestMethod(“ GET”); HttpURLConnection也会发送POST请求。被设置

Android:HttpUrlConnection使用POST发送请求正文(而不是GET)

使用 HttpClient 如何发送 GET 请求并在更改端点的循环中返回响应

在java中使用HttpURLConnection发送带有GET请求的请求正文

Java:发送前显示HttpURLConnection的请求

如果未读取响应,则HttpURLConnection不会发送请求

有没有办法通过wifi将GET请求发送到ip地址而不是HttpUrlConnection

使用HttpURLConnection发送帖子

HttpUrlConnection在单个连接中发送多个发布请求

如何使用HttpURLConnection在请求正文中发送数据?

使用HttpURLConnection类在请求正文中发送数据

HttpURLConnection将JSON POST请求发送到Apache / PHP

发送“ get”请求后无法打印响应数据

如何从请求中返回响应(post | get)?

NodeJS + Graphql:即使发送响应后,如何运行代码?

从横幅发送GET请求

HTTP响应始终返回响应代码200,即使请求失败,返回状态代码也是REST的一部分

Google Home 发送 GET 请求并说响应

HttpURLConnection返回-1作为响应代码

即使使用POST方法也发送GET请求-jQuery

在Java + Springboot中将HTTP请求发送到远程地址并返回响应的方法数量

向 HttpURLConnection.getInputStream() 发送响应并避免“无效 Http 响应”的格式是什么?

带有HTTP标头“ Accept”的HttpURLConnection GET请求

使用 HTTPURLConnection 的 Docker 容器之间的 400 错误 HTTP GET 请求

WebApi如何在向用户返回响应后发送异步电子邮件?

ANDROID - 使用 HttpURLConnection 通过 json 响应将数据发送到 API

在Java中通过HttpURLConnection发送HTTP POST请求不起作用

如何使用 HttpURLConnection 将 GET 请求与 Web API 一起用于 JSON 响应?

HTTP GET请求返回400响应代码