【问题标题】:How do I convert a curl command with output option to httparty?如何将带有输出选项的 curl 命令转换为 httparty?
【发布时间】:2012-05-06 10:06:42
【问题描述】:

我正在尝试转换:

curl -k -v -X GET -H "Accept: application/pdf" https://username:password@rest.click2mail.com/v1/mailingBuilders/456/proofs/1 -o myProof

为 httparty。这是我的代码:

@auth = {:username => 'test', :password => 'test'}
options = {:headers => {'Accept' => 'application/pdf'}, :basic_auth => @auth }
body = HTTMultiParty.get("https://stage.rest.click2mail.com/v1/mailingBuilders/54544/proofs/1", options)

File.open("myProof", "w") do |file|
  file.write body
end

p "Reponse #{body.parsed_response}"

响应返回

“无法将 urn:c2m:document:id:361 从 text/plain 转换为 application/pdf”

编辑 (2)

body.inspect with "text/plain" 返回

#<HTTParty::Response:0x8 @parsed_response=nil, @response=#<Net::HTTPNotAcceptable 406 Not Acceptable readbody=true>, @headers={\"date\"=>[\"Sun, 06 May 2012 11:22:12 GMT\"], \"server\"=>[\"Jetty(6.1.x)\"], \"content-length\"=>[\"0\"], \"connection\"=>[\"close\"], \"content-type\"=>[\"text/plain; charset=UTF-8\"]}>

带有“应用程序/pdf”

#<HTTParty::Response:0x7fce08a92260 @parsed_response=\"Cannot convert urn:c2m:document:id:361 from text/plain to application/pdf\", @response=#<Net::HTTPBadRequest 400 Bad Request readbody=true>, @headers={\"date\"=>[\"Sun, 06 May 2012 11:24:09 GMT\"], \"server\"=>[\"Jetty(6.1.x)\"], \"content-type\"=>[\"application/pdf\"], \"connection\"=>[\"close\"], \"transfer-encoding\"=>[\"chunked\"]}>

编辑 3

API:第 8 步

https://developers.click2mail.com/rest-api#send-a-test-mailing

编辑 4

带有调试输出选项

带有“应用程序/pdf”

opening connection to stage.rest.click2mail.com...
opened
<- "GET /v1/mailingBuilders/54544/proofs/1 HTTP/1.1\r\nAccept: application/pdf\r\nAuthorization: Basic Ym9sb2RldjptVW43Mjk0eQ==\r\nConnection: close\r\nHost: stage.rest.click2mail.com\r\n\r\n"
-> "HTTP/1.1 400 Bad Request\r\n"
-> "Date: Sun, 06 May 2012 14:05:30 GMT\r\n"
-> "Server: Jetty(6.1.x)\r\n"
-> "Content-Type: application/pdf\r\n"
-> "Connection: close\r\n"
-> "Transfer-Encoding: chunked\r\n"
-> "\r\n"
-> "49\r\n"
reading 73 bytes...
-> ""
-> "Cannot convert urn:c2m:document:id:361 from text/plain to application/pdf"
read 73 bytes
reading 2 bytes...
-> ""
-> "\r\n"
read 2 bytes
-> "0\r\n"
-> "\r\n"
Conn close

带有“文本/纯文本”

opening connection to stage.rest.click2mail.com...
opened
<- "GET /v1/mailingBuilders/54544/proofs/1 HTTP/1.1\r\nAccept: text/plain\r\nAuthorization: Basic Ym9sb2RldjptVW43Mjk0eQ==\r\nConnection: close\r\nHost: stage.rest.click2mail.com\r\n\r\n"
-> "HTTP/1.1 406 Not Acceptable\r\n"
-> "Date: Sun, 06 May 2012 14:14:19 GMT\r\n"
-> "Server: Jetty(6.1.x)\r\n"
-> "Content-Length: 0\r\n"
-> "Connection: close\r\n"
-> "Content-Type: text/plain; charset=UTF-8\r\n"
-> "\r\n"
reading 0 bytes...
-> ""
read 0 bytes
Conn close

从 curl 命令记录

编辑 (4)

好吧,我找到了 Rest Client 的解决方案,我用这个 gem 做了我微薄的贡献。

https://github.com/bolom/click2mail-ruby-gem

谢谢大家

【问题讨论】:

  • 顺便说一下,您已经在正文中包含了您的用户名/密码(Authorization 标头)。
  • @Len 与 RestClient。我没有这个问题。感谢您的帮助
  • 干得好!很高兴听到您成功了。

标签: ruby curl httparty


【解决方案1】:

你也可以使用 net::http (需要 'net/http') 有关如何下载大文件的示例,请参阅this question

【讨论】:

  • 如果我们要为您提供帮助,您需要说明在哪里看到此错误。
  • 这里:p body.parsed_response
  • @len 我在原始问题中添加了一些 cmets
  • @Bolo,我在发布之前尝试了我的示例,总是这样做它有效,但是你编辑了问题,所以现在我们有了更多细节,我今晚会尝试使用 net/http
  • @Bolo,为了能够对此进行测试,我需要一个有效的用户/密码,测试/测试显然不起作用,您有测试帐户或其他什么吗?
【解决方案2】:

试试这个:

body = Httparty.get("https://username:password@rest.click2mail.com/v1/mailingBuilders/456/proofs/1")

File.open("myProof", "w") do |file|
    file.write body
end

【讨论】:

  • api 不允许没有文件名的请求。 parsed_response 返回此“无法将 urn:c2m:document:id:361 从 text/plain 转换为 application/pdf”
  • 我不知道你现在在说什么。 :|
  • 您的解决方案不起作用。 p body.parsed_response 向我返回这个“”无法将 urn:c2m:document:id:361 从 text/plain 转换为 application/pdf”
  • 您可能需要将Accept 标头添加到Httparty。试试body = Httparty.get("...", :headers =&gt; {"Accept" =&gt; "application/pdf"})
  • 与标题标签相同
【解决方案3】:

问题出在 API 本身。

这与您如何调用 API 以获取证明或您使用的 Rest API 库无关。问题是您用于创建此 mailingBuilders 的任何内容都会导致出现错误消息“无法将 urn:c2m:document:id:361 从 text/plain 转换为 application/pdf”的问题。

请将您创建此 mailingBuilder 的确切内容发送至 support@click2mail.com,以便我们对其进行审核并查看问题所在。

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2022-01-06
    • 2018-12-30
    • 2021-10-08
    • 2016-10-24
    • 2020-10-21
    相关资源
    最近更新 更多