Рефакторинг запроса CURL в Ruby's RestClient - PullRequest
3 голосов
/ 11 ноября 2011

У меня проблемы с переводом этого запроса CURL в Ruby с использованием RestClient:

system("curl --digest -u #{@user}:#{@pass} '#{@endpoint}/#{id}' --form image_file=@'#{path}' -X PUT")

Я получаю 400 Bad Request ошибки. Насколько я могу судить, запрос действительно проходит аутентификацию, но зависает от части загрузки файла. Вот мои лучшие попытки, все из которых дают мне эти 400 ошибок:

resource = RestClient::Resource.new "#{@endpoint}/#{id}", @user, @pass
#attempt 1
resource.put :image_file => File.new(path, 'rb'), :content_type => 'image/jpg'
#attempt 2
resource.put File.read(path), :content_type => 'image/jpg'
#attempt 3
resource.put File.open(path) {|f| f.read}, :content_type => 'image/jpg'

Ответы [ 3 ]

2 голосов
/ 19 ноября 2011

в запросе curl вы отправляете составные данные формы через PUT-запрос, поэтому, соответственно, вам нужно сделать то же самое в RestClient:

resource = RestClient::Resource.new "#{@endpoint}/#{id}", @user, @pass
resource.put :image_file => File.new(path, 'rb'), :content_type => 'multipart/form-data', :multipart => true
1 голос
/ 23 ноября 2011

Робустус прав, вы также можете использовать RestClient :: Payload :: Multipart.

Однако я видел, что вы спрашиваете это для своего драгоценного камня Moodstocks (https://github.com/adelevie/moodstocks). У вас будет другая проблема, котораяявляется то, что (AFAIK) RestClient не может обрабатывать дайджест-проверку подлинности HTTP.

Для этого вам потребуется использовать другую библиотеку, например HTTParty. Вы все равно можете использовать RestClient :: Payload :: Multipart для генерации полезной нагрузки, как показано здесь:https://github.com/Moodstocks/moodstocks-api/blob/master/moodstocks-api/msapi.rb

Вы также можете использовать одну из привязок cURL или Rufus :: Verbs, если хотите.

0 голосов
/ 18 ноября 2011

Вам необходимо изучить запросы, чтобы определить, чем они отличаются.Вы можете попробовать захватить ваш трафик с помощью wireshark или прокси-запросы на запросы через fiddler или charles .

...