Typhoeus вместо curl?


#1

Прошу помочь разобраться с заголовками, отправляемыми посредством typhoeus… суть проблемы:

ДОстаем из парамсов code и делаем GET:

code = params[:code]
response = Typhoeus::Request.post('https://example.com',
  params: { :grant_type => "authorization_code",
            :client_id => "12345",
            :client_secret => "67890",
            :code => code
           }
)
hash = JSON.parse(response.body) # => {"access_token"=>"*******", "token_type"=>"bearer", "expires_in"=>1209599, "refresh_token"=>"******"}

Здесь все норм.
Далее вытаскиваем из хэша полученного ответа токен доступа с тем, чтобы при дальнейших запросах к API сохранять аутентификацию:

`var = 'Authorization: Bearer ' + hash['access_token']`

response = Typhoeus::Request.get('https://example.com',
  method: :get,
  headers: {???}
  )

, и вот здесь не могу пока понять, как правильно отправить заголовки из typhoeus… не проходит запрос, и так и эдак уже попробовал. С curl это было бы совсем просто:

<?
$token_json = json_decode($out);
    $headers    = array(
        'Authorization: Bearer ' . $token_json->access_token,
        'User-Agent: blablabla'
    );
    if ($curl = curl_init()) {
        curl_setopt($curl, CURLOPT_URL, 'https://example.com);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        $out = curl_exec($curl);
        curl_close($curl);
    }

Help, please. Any ideas? Впервые пробую использовать typhoeus.


#2

уфффф…

headers: { Authorization: "Bearer #{token}" }

solved.
Но вообще, есть ли альтернативные способы такого рода, помимо typhoeus ?


#3

Основываясь на документации API хедхантера, сделал на php скрипт обновления резюме (реально достает у них необходимость открывать несколько страничек, чтобы обновить два-три своих резюме), затем перенес логику на rails, вместо curl теперь typhoeus. Портировал практически “дословно”, один-в-один, что получилось, привожу далее. Не знаю, есть ли смысл “раскидывать” скрипт по MVC, он ведь совсем простенький? на руби даже в чем-то проще, чем на пыхе, на мой взгляд, а результат тот же. Также не понимаю, почему в конце приходится обнулять response = nil , без чего весь json вываливается на страничку, в пыхе это не требовалось… черкнули бы пару слов, корифеи. Что можно изменить к лучшему?


  id_hh = ENV['ID_HH'] #'*******************'
  secret_hh = ENV['SECRET_HH'] #'*******************'

  if request.GET[:code].nil?
       link_to 'Обновить резюме', 'https://hh.ru/oauth/authorize?response_type=code&client_id=' + id_hh
      else 
response = Typhoeus::Request.post('https://hh.ru/oauth/token',
  params: { :grant_type => "authorization_code",
            :client_id => id_hh,
            :client_secret => secret_hh,
            :code => params[:code]
           }
)
hash = JSON.parse(response.body)

response = Typhoeus::Request.get('https://api.hh.ru/resumes/mine',
  method: :get,
  headers: { Authorization: "Bearer #{hash['access_token']}" }
  )
response = JSON.parse(response.body)
 
response['items'].each do |item|
response = Typhoeus::Request.post('https://api.hh.ru/resumes/' + item['id'] + '/publish',
  headers: { Authorization: "Bearer #{hash['access_token']}" }
  )
  
  if response.body.blank?
  concat 'Резюме ' + '"' + item['title'] + '"' + ' успешно обновлено.'
  concat(tag 'br')
  
else
concat response.body
concat(tag 'br')
concat 'Резюме ' + '"' + item['title'] + '"' + ' было обновлено ' + item['updated']
concat(tag 'br')
end
 end
 response = nil
end