python中,我以以下方式使用requests调用API(不幸的是,无法共享API本身,因此很难重现):

import requests
url = url
headers = {'API-key': 'xxxxxxxxxxxxxxxx',
       'Content-type': 'application/json',
       'Accept': 'application/json'
       }

r = requests.get(url, headers = headers, verify=False)
print(r.text)


在这里,我认为verify=False会强制要求忽略SSL证书(如建议的here)。效果很好,但是我无法通过httr通过以下方式进行复制:

 library(httr)

url <- url
headers <- c('API-key' = 'xxxxxxxxxxxxxxxx',
             'Content-type' = 'application/json',
              'Accept' = 'application/json'
          ))

GET(url = url, add_headers(headers = headers)


现在,我相信verify=False代码中的requests是此处的关键,someone suggested,使用httr忽略SSL证书的方法是在请求之前使用set_config()

httr::set_config(httr::config(ssl_verifypeer=0L, ssl_verifyhost=0L))

GET(url = url, add_headers(headers = headers))


但这是行不通的。

$message
[1] "Unauthorized"

$http_status_code
[1] 401


httr::set_config(httr::config(ssl_verifypeer=0L, ssl_verifyhost=0L))等同于verify=False调用中的requests吗?

最佳答案

您显示的错误消息实际上是服务器的响应。 Is与SSL证书无关,因此您完全不需要禁用该检查。

问题在于add_headers中的参数名称是.headers而不是headers。你只需要做

GET(url = url, add_headers(.headers = headers)

关于python - httr等同于在请求中进行验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56222109/

10-12 18:03