Это запрос Curl, описанный в документации API Strava:
$ curl -X POST https://www.strava.com/api/v3/push_subscriptions \
-F client_id=5 \
-F client_secret=7b2946535949ae70f015d696d8ac602830ece412 \
-F 'callback_url=http://a-valid.com/url' \
-F 'verify_token=STRAVA'
Я запустил его из командной строки с соответствующими значениями, и он отлично работает.
Я также могу запустить его в Postman, где запрос выглядит следующим образом: Примечание - нет авторизации и заголовков, только данные формы. Заголовки (10), которые вы можете видеть в Почтальоне, являются временными заголовками, автоматически генерируемыми Почтальоном.
Но независимо от того, что я пытаюсь использовать HTTParty Я не могу заставить его работать:
response = HTTParty.post("https://strava.com/api/v3/push_subscriptions", {
body: {
callback_url: "#{params}/api/v1/strava/event_data",
client_secret: "#{ENV["STRAVA_CLIENT_SECRET"]}",
client_id: "#{ENV["STRAVA_CLIENT_ID"]}",
verify_token: "STRAVA"
}.to_json,
headers: {
"Content-Type" => "multipart/form-data",
'Accept' => 'application/json'
}
})
response = HTTParty.post("https://strava.com/api/v3/push_subscriptions", {
body: {
callback_url: "#{params}/api/v1/strava/event_data",
client_secret: "#{ENV["STRAVA_CLIENT_SECRET"]}",
client_id: "#{ENV["STRAVA_CLIENT_ID"]}",
verify_token: "STRAVA"
}
})
response = HTTParty.post("https://strava.com/api/v3/push_subscriptions", {
body: {
callback_url: "#{params}/api/v1/strava/event_data",
client_secret: "#{ENV["STRAVA_CLIENT_SECRET"]}",
client_id: "#{ENV["STRAVA_CLIENT_ID"]}",
verify_token: "STRAVA"
},
headers: {
"Content-Type" => "multipart/form-data",
}
})
Все приведенные выше HTTP-запросы приводят к следующей ошибке: Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
Следующий запрос выполняет поразить сервер, но не так, как ожидает Страва, поэтому он не даст желаемых результатов
response = HTTParty.post("https://strava.com/api/v3/push_subscriptions", {
query: {
callback_url: "#{params}/api/v1/strava/event_data",
client_secret: "#{ENV["STRAVA_CLIENT_SECRET"]}",
client_id: "#{ENV["STRAVA_CLIENT_ID"]}",
verify_token: "STRAVA"
}
})
Кто-нибудь может увидеть, где я с этим не так?
Спасибо за помощь!
ОБНОВЛЕНИЕ:
Я смог заставить его работать, используя Ruby - Net::HTTP
:
require "uri"
require "net/http"
url = URI("https://www.strava.com/api/v3/push_subscriptions")
https = Net::HTTP.new(url.host, url.port);
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "multipart/form-data;"
form_data = [['client_id', '3****'],['client_secret', '461a7cd*****'],['callback_url', 'https://**********/api/v1/strava/event_data'],['verify_token', '******']]
request.set_form form_data, 'multipart/form-data'
response = https.request(request)
puts response.read_body
Было бы здорово, если бы он работал в HTTParty
, нам нужно жемчужина в любом случае для других частей проекта и будет держать все единообразно.