# How to rewrite a curl request into a NET::HTTP one?

**URL:** <https://www.ruby-forum.com/t/how-to-rewrite-a-curl-request-into-a-net-http-one/194031>\
**Category:** Ruby\
**Created:** [August 28, 2010, 3:55pm UTC](https://www.ruby-forum.com/t/how-to-rewrite-a-curl-request-into-a-net-http-one/194031 "2010-08-28T15:55:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [August 28, 2010, 3:55pm UTC](https://www.ruby-forum.com/t/how-to-rewrite-a-curl-request-into-a-net-http-one/194031/1 "2010-08-28T15:55:57Z")

</div>

I have a curl request (to upload a file) which is running weel in the  
console

$curl -H “X-TrackerToken: xxxxxxx” -X POST -F  
Filedata=@/Developpement/Projects/TESTS/pictures/Glen.gif  
[http://www.pivotaltracker.com/services/v3/projects/999999/stories/999999/attachments](http://www.pivotaltracker.com/services/v3/projects/999999/stories/999999/attachments)

I tried to mimic it in my ruby script (1.9.2)

* * *

…  
attachment = “Filedata=@/Developpement/Projects/TESTS/pictures/Glen.gif”

uri =  
URI.parse(“[http://www.pivotaltracker.com/services/v3/projects/999999/stories/999999/attachments](http://www.pivotaltracker.com/services/v3/projects/999999/stories/999999/attachments)”)

response = Net::HTTP.start(uri.host, uri.port) do |http|  
http.post(uri.path, attachment, {‘X-TrackerToken’ =\> xxxxxxx})  
end

but this doesn’t work and gave me an Internal Server Error

is my http.post wrong ??

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [August 28, 2010, 4:04pm UTC](https://www.ruby-forum.com/t/how-to-rewrite-a-curl-request-into-a-net-http-one/194031/2 "2010-08-28T16:04:35Z")

</div>

On Sat, Aug 28, 2010 at 4:56 PM, Kad K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> …
> 
> is my http.post wrong ??

> **[Multipart post in Ruby](http://stanislavvitvitskiy.blogspot.com/2008/12/multipart-post-in-ruby.html)**
>
> Uploading a file to a server is a common task in web-development practice. It requires you to create a special HTML form with enctype set to...

---

<div class="post-metadata">

**Author:** ![kadoudal](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f0a364/32.png) [@kadoudal](https://www.ruby-forum.com/u/kadoudal)\
**Post date:** [August 28, 2010, 6:30pm UTC](https://www.ruby-forum.com/t/how-to-rewrite-a-curl-request-into-a-net-http-one/194031/3 "2010-08-28T18:30:35Z")

</div>

Ammar A. wrote:

> On Sat, Aug 28, 2010 at 4:56 PM, Kad K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> wrote:
> 
> > …
> > 
> > is my http.post wrong ??
> 
> [Stanislav Vitvitskiy's blog: Multipart post in Ruby](http://stanislavvitvitskiy.blogspot.com/2008/12/multipart-post-in-ruby.html)

Thanks a lot Amar, could not get it right … I switched to curb (  
[GitHub - taf2/curb: Ruby bindings for libcurl](http://github.com/taf2/curb) )  
and it works ( 5 mn to install and understand it then running …)

def add\_attachment(story\_id, filepath)

```
resource_uri = 

```

URI.parse(“http://#{@base\_url}/#{@project\_id}/stories/#{story\_id}/attachments”)

```
request = Curl::Easy.new("#{resource_uri}") do |curl|
  curl.headers["X-TrackerToken"] = @token
  curl.on_success do |response|
      doc = Hpricot(response.body_str).at('attachment')
      @return = { :id => doc.at('id').innerHTML.to_i, :status => 

```

doc.at(‘status’).innerHTML }  
end  
curl.on\_failure do |response, err|  
begin  
raise TrackerException.new(err.inspect)  
rescue TrackerException =\> e  
logger = Log4r::Logger[‘test’]  
logger.error(“ADD ATTACHMENT : #{e.message}”)  
logger.error(“#{e.backtrace}”)  
@return = nil  
end  
end  
end  
request.multipart\_form\_post = true  
request.http\_post(Curl::PostField.file(“Filedata”, “#{filepath}”))  
@return  
end

no worry about building a multi-part form… !
