Неверный тип содержимого после запроса POST с httr - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь использовать API с именем "Offres d'emploi v2" (вакансии), доступный во французской государственной службе занятости (Pôle Emploi).API описан здесь .Для использования API требуется токен и аутентификация через OAuth v2 в процессе, описанном здесь .

Я использую R 3.5.0 и httr 1.3.1.Сначала я указываю тело запроса.eeid и eesec - это идентификатор и секретный ключ, предоставленные Pôle Emploi, когда я зарегистрировался.

require(jsonlite)
require(httr)

request_body <- list(
   grant_type = "client_credentials",
   client_id = eeid,
   client_secret = eesec,
   scope = paste(
      "api_offresdemploiv2",
      "o2dsoffre",
      paste0("application_",eeid,"%20api_offresdemploiv2"), sep = " "))

Затем я запускаю запрос POST:

result_auth <- POST(
    "https://entreprise.pole-emploi.fr/connexion/oauth2/access_token",
    realm = "/partenaire",
    body = request_body,
    add_headers('Content-Type'='application/x-www-form-urlencoded')
    )
result_auth
content(result_auth)

, который возвращает ошибку о типе содержимого:

> result_auth
Response [https://entreprise.pole-emploi.fr/connexion/oauth2/access_token]
  Date: 2018-09-29 14:33
  Status: 400
  Content-Type: application/json; charset=UTF-8
  Size: 70 B
> content(result_auth)
$error
[1] "invalid_request"

$error_description
[1] "Invalid Content Type"

Я также попытался заменитьстрока add_headers('Content-Type'='application/x-www-form-urlencoded') с content_type("application/x-www-form-urlencoded"), но я получаю то же сообщение об ошибке.

Я явно что-то здесь не так делаю, но что?Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 сентября 2018

Вот ответ, следующий непосредственно за комментарием @hrbrmstr.Большое ему спасибо.

Вместо указания типа содержимого в качестве заголовка следует использовать параметр encode = "form" в функции POST.

Обратите внимание, что eeid и eesec являются идентификатором и секретным ключом, предоставленным Pôle Emploi при регистрации.Полный сценарий выглядит следующим образом.

require(jsonlite)
require(httr)

request_body <- list(
    grant_type = "client_credentials",
    client_id = eeid,
    client_secret = eesec,
    scope = paste(
"api_offresdemploiv2",
"o2dsoffre",
paste0("application_",eeid), sep = " "))

result_auth <- POST(
    "https://entreprise.pole-emploi.fr/connexion/oauth2/access_token",
    query = list(realm = "/partenaire"),
    body = request_body,
    encode = "form"
    )
...