有没有办法让 httr 忽略 url 中的百分比字符?或者不是百分比编码的东西?
Is there a way to get httr to ignore percent characters in the url? Or NOT percent-encode something?
我正在尝试使用 R 从 API 中获取一些数据。 API 的管理员构造它,使 UN 和 PW 成为 URL 字符串中参数的一部分。例如:
https://theSite.net/Something/SomethingWS.aspx?username=myUsername&password=myPassword&action=DoThisThing
如果我使用 RCurl 创建我的请求,这会很好地工作。但是,我正在尝试使用 httr(RCurl 的包装器),因为我希望能够测试获取数据时可能出现的任何错误。例如,像这样:
resp <- GET(theURL)
warn_for_status(resp)
if (status_code(resp) == 200) { WE GOT GOOD STUFF }
所以要使用 httr,我会这样做:
theRequest <- GET(theURL, query = list(username = myUN, password = myPW, action = "DoThisThing"))
这中断了。我意识到我的密码中有一个 %2。 httr 尝试通过将 % 更改为 %25 来做正确的事情,因此我的密码现在在 %2 应该在的所有地方都有 %252,请求被拒绝。有没有办法告诉 httr 不要 'fix' 我的密码,或者我猜是百分比编码?
我试图在 "authenticate" 中使用我的凭据,但服务器也拒绝了:
theRequest <- GET(theURL, authenticate(myUN, myPW), query = list(action = "DoThisThing"))
我在 httr 文档中找到了 POST() 函数的一行,这让我找到了答案:
For "form", elements are coerced to strings and escaped, use I() to
prevent double-escaping.
我把 PW 包在了 I 里,一切正常:
theRequest <- GET(theURL, query = list(username = myUN, password = I(myPW), action = "DoThisThing"))
我不知道这是应该如何完成的,还是某种变通方法,但它确实有效!
感谢观看!
我正在尝试使用 R 从 API 中获取一些数据。 API 的管理员构造它,使 UN 和 PW 成为 URL 字符串中参数的一部分。例如:
https://theSite.net/Something/SomethingWS.aspx?username=myUsername&password=myPassword&action=DoThisThing
如果我使用 RCurl 创建我的请求,这会很好地工作。但是,我正在尝试使用 httr(RCurl 的包装器),因为我希望能够测试获取数据时可能出现的任何错误。例如,像这样:
resp <- GET(theURL)
warn_for_status(resp)
if (status_code(resp) == 200) { WE GOT GOOD STUFF }
所以要使用 httr,我会这样做:
theRequest <- GET(theURL, query = list(username = myUN, password = myPW, action = "DoThisThing"))
这中断了。我意识到我的密码中有一个 %2。 httr 尝试通过将 % 更改为 %25 来做正确的事情,因此我的密码现在在 %2 应该在的所有地方都有 %252,请求被拒绝。有没有办法告诉 httr 不要 'fix' 我的密码,或者我猜是百分比编码?
我试图在 "authenticate" 中使用我的凭据,但服务器也拒绝了:
theRequest <- GET(theURL, authenticate(myUN, myPW), query = list(action = "DoThisThing"))
我在 httr 文档中找到了 POST() 函数的一行,这让我找到了答案:
For "form", elements are coerced to strings and escaped, use I() to prevent double-escaping.
我把 PW 包在了 I 里,一切正常:
theRequest <- GET(theURL, query = list(username = myUN, password = I(myPW), action = "DoThisThing"))
我不知道这是应该如何完成的,还是某种变通方法,但它确实有效!
感谢观看!