我正在尝试从 SEC 政府网站上获取一家公司的季度结束日期。由于某种原因,我不断收到连接错误。该代码适用于我在美国的朋友,但不适用于加拿大的我。我尝试使用 VPN,但仍然遇到相同的错误。这是代码和我收到的错误。
当我将网址输入 google 时,它会将我带到包含所有信息的页面,所以我不确定为什么不能将其拉入 R。
library(derivmkts)
library(quantmod)
library(jsonlite)
library(tidyverse)
url = "https://data.sec.gov/submissions/CIK0000320193.json"
df <- fromJSON(url, flatten = T)
Error in open.connection(con, "rb") :
cannot open the connection to 'https://data.sec.gov/submissions/CIK0000320193.json'
In addition: Warning message:
In open.connection(con, "rb") :
cannot open URL 'https://data.sec.gov/submissions/CIK0000320193.json': HTTP status was '403 Forbidden'
连接到此网址时我没想到会出现 403 错误
他们要求您在请求标头中声明用户代理 - https://www.sec.gov/os/accessing-edgar-data
显然,作为示例提供的也可以接受,但您确实应该在那里提供您的联系方式。
使用
httr2
,它仍然使用 jsonlite
来解析 JSON 响应:
library(httr2)
resp <- request("https://data.sec.gov/submissions/CIK0000320193.json") |>
req_user_agent("Sample Company Name AdminContact@<sample company domain>.com") |>
# set verbosity level for debugging, 1: show headers
req_perform(verbosity = 1)
#> -> GET /submissions/CIK0000320193.json HTTP/1.1
#> -> Host: data.sec.gov
#> -> User-Agent: Sample Company Name AdminContact@<sample company domain>.com
#> -> Accept: */*
#> -> Accept-Encoding: deflate, gzip
#> ->
#> <- HTTP/1.1 200 OK
#> <- Content-Type: application/json
#> <- x-amzn-RequestId: c634dcbe-68aa-4777-9f18-4edfae752eb4
#> <- Access-Control-Allow-Origin: *
#> <- x-amz-apigw-id: IvJu4HiHIAMFidw=
#> <- X-Amzn-Trace-Id: Root=1-64c2bcc5-5db9315369e664da512cb6b5
#> <- Vary: Accept-Encoding
#> <- Content-Encoding: gzip
#> <- Expires: Thu, 27 Jul 2023 18:51:49 GMT
#> <- Cache-Control: max-age=0, no-cache, no-store
#> <- Pragma: no-cache
#> <- Date: Thu, 27 Jul 2023 18:51:49 GMT
#> <- Content-Length: 28594
#> <- Connection: keep-alive
#> <- Strict-Transport-Security: max-age=31536000 ; preload
#> <- Set-Cookie: ak_bmsc=E9...
resp
#> <httr2_response>
#> GET https://data.sec.gov/submissions/CIK0000320193.json
#> Status: 200 OK
#> Content-Type: application/json
#> Body: In memory (157568 bytes)
# first few keys / values from JSON:
resp_body_json(resp, simplifyVector = TRUE, flatten = TRUE) |>
head(n = 10) |>
str()
#> List of 10
#> $ cik : chr "320193"
#> $ entityType : chr "operating"
#> $ sic : chr "3571"
#> $ sicDescription : chr "Electronic Computers"
#> $ insiderTransactionForOwnerExists : int 0
#> $ insiderTransactionForIssuerExists: int 1
#> $ name : chr "Apple Inc."
#> $ tickers : chr "AAPL"
#> $ exchanges : chr "Nasdaq"
#> $ ein : chr "942404110"
创建于 2023-07-27,使用 reprex v2.0.2
我来自欧盟,我可以在浏览器中打开该 JSON URL,没有任何问题,但默认的
jsonlite
和 httr2
代理被阻止。仅当我也设置了 httr2
时,才可以使用带有 accept-language
的浏览器代理。他们检查用户代理中是否存在一些奇怪的模式,"foo_bar"
- 不可以 / "foo.bar"
- 可以