Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: POST / GET запрос с помощью консольной утилиты curl  (Прочитано 28861 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tarik

  • Автор темы
  • Участник
  • *
  • Сообщений: 161
    • Просмотр профиля
Устал гуглить. Может быть тут есть кто-нибудь, кто может мне внятно разъяснить, как с помощью команды curl отправить POST или GET запрос?
Давайте разберем на примере вот такого POST-запроса:
POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn
                     NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: text/html

grant_type=client_credentials

Вот такую штуку надо отправить.

Я напишу, как я пытался это сделать, но в ответ мне приходила html-страница, а не teken-ключ.

Вариант1.
curl --header @PATH_TO_FILE/post.txt -X POST --data '"grant_type":"client_credentials"' https://api.twitter.com
При этом в файле post.txt:
Host=api.twitter.com&User-Agent=curl&Authorization=N29wR1luZHlNNWl4aGRpTWVmdWd2cEl1UzpRa2twaERvWlFjRm45OU8wbHJhUEthMFZlOWFuMTUwMDgyNmdJUURsYlJoc1pIVnI2SQ==&Content-Type=application/x-www-form-urlencoded;charset=UTF-8&Accept-Encoding=text/html
Вариант2.
Та же команда, но файл отредактирован иначе:
POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0
Authorization: Basic N29wR1luZHlNNWl4aGRpTWVmdWd2cEl1UzpRa2twaERvWlFjRm45OU8wbHJhUEthMFZlOWFuMTUwMDgyNmdJUURsYlJoc1pIVnI2SQ==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Accept-Encoding: text/html

Вариант 3.
Другая вариация команды:
curl --post301 'https://api.twitter.com' --data 'grant_type=client_credentials' --header @PATH_TO_FILE/post.txt
Вариант 4.
Я просто взял и воспользовался этим кодером-энкодером: http://www.url-encode-decode.com/
И закодировал весь запрос в один URL:
curl "POST+%2Foauth2%2Ftoken+HTTP%2F1.1%0D%0AHost%3A+api.twitter.com%0D%0AUser-Agent%3A+My+Twitter+App+v1.0.23%0D%0AAuthorization%3A+Basic+eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJn%0D%0A+++++++++++++++++++++NmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw%3D%3D%0D%0AContent-Type%3A+application%2Fx-www-form-urlencoded%3Bcharset%3DUTF-8%0D%0AContent-Length%3A+29%0D%0AAccept-Encoding%3A+text%2Fhtml%0D%0A%0D%0Agrant_type%3Dclient_credentials"Вот тут в ответ что-то другое пришло, а именно:
curl: (6) Couldn't resolve host далее весь этот URL..

В общем, Твиттер шлет мне в ответ какую-то html-страницу, а должен слать ключик. Подскажите с синтаксисом, все ли я правильно делаю?

Оффлайн Master_Sergius

  • Активист
  • *
  • Сообщений: 528
  • i3
    • Просмотр профиля
man curl
Тип запроса определяется с ключем -X (GET идет по-умолчанию, можно не указывать):

curl -X GET http://www.example.com
curl -X POST http://www.example.com -d '{"variable": "value"}'
curl -X POST http://www.example.com -d @filename.json

Если используется https, можно опустить верификацию SSL ключем -k:

curl -X GET -k https://www.example.com
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Оффлайн Tarik

  • Автор темы
  • Участник
  • *
  • Сообщений: 161
    • Просмотр профиля
Пробовал я ключик -Х, и писал об этом.
Рано я сдался. В общем нашел косяк.
Я коннектился к https://api.twitter.com, а надо было к https://api.twitter.com/oauth2/token/
Все получилось.

 

Страница сгенерирована за 0.029 секунд. Запросов: 25.