2017-02-14 6 views
1

Я пытаюсь преобразовать запрос curl ниже в HTTP-запрос для средства postman. Инструмент почтальона, возможно, не имеет большого значения в этом вопросе. Скажите, пожалуйста, как я могу преобразовать завиток в http.Преобразование запроса на завивание в http-запрос?

curl -X POST -i 'https://a-webservice.com' -H X-apiKey:jamesBond007 -d MESSAGE-TYPE="pub.controller.user.created" -d PAYLOAD='a json object goes here!' 

То, что я пытался/узнал: - Установить заголовки Content-Type: JSON/приложение, X-apiKey

  • из локона Docs, опция -d означает, что мы должны установить контент- применение Тип/х-WWW-форм-urlencoded

Постман позволяет мне установить тело запроса, используя только один из 4 параметры- форм-данных, х-WWW-форм-urlencoded, сырье, двоичный. Можете ли вы показать, как я могу преобразовать два-d вариантов завитка в эти параметры?

Я смущен, как собрать все вместе.

Спасибо!

ответ

0

Формат application/x-www-form-urlencoded данных является такой же, как строки запроса, так:

MESSAGE-TYPE=pub.controller.user.created&PAYLOAD=a json object goes here! 

Для подтвердите, что вы можете сбросить данные запроса с помощью curl, используя the --trace-ascii option:

curl --trace-ascii - -X POST -i 'https://a-webservice.com' \ 
    -H X-apiKey:jamesBond007 -d MESSAGE-TYPE="pub.controller.user.created" \ 
    -d PAYLOAD='a json object goes here!' 

--trace-ascii принимает имя файла в качестве аргумента, но если вы его дадите -, он сбрасывает stdout.

Выход для вышеприведенного вызова будет включать в себя что-то вроде этого:

=> Send header, 168 bytes (0xa8) 
0000: POST/HTTP/1.1 
0011: Host: example.com 
0024: User-Agent: curl/7.51.0 
003d: Accept: */* 
004a: X-apiKey:jamesBond007 
0061: Content-Length: 73 
0075: Content-Type: application/x-www-form-urlencoded 
00a6: 
=> Send data, 73 bytes (0x49) 
0000: MESSAGE-TYPE=pub.controller.user.created&PAYLOAD=a json object g 
0040: oes here! 
== Info: upload completely sent off: 73 out of 73 bytes 

Так же, как и то, что подтвердил в ответ на Convert curl request into http request?, который использует nc, но подтвердил, используя только curl себя, с возможностью --trace-ascii.

+0

Спасибо! Я не делал все файлы ascii и файлов. Но я просто посмотрел на последние три строки вашего вывода. Я выбрал опцию «raw» под телом, т. Е. Я установил тело запроса в MESSAGE-TYPE = abc.deg = f & PAYLOAD = {json object}. Это сработало для меня. – SenseiTester

1

Я мало знаю о почтальоне. Но я захватил то, что отправлено в файл с именем /tmp/ncout. Исходя из этого, мы видим, что отправляемый Content-Type равен application/x-www-form-urlencoded, как вы определили, и что отправляемая полезная нагрузка равна MESSAGE-TYPE=pub.controller.user.created&PAYLOAD=a json object goes here!.

Помогло ли это?

[email protected] ~ $ nc -l 8888 >/tmp/ncout 2>&1 </dev/null & 
[1] 15259 
[email protected] ~ $ curl -X POST -i 'http://localhost:8888/' -H X-apiKey:jamesBond007 -d MESSAGE-TYPE="pub.controller.user.created" -d PAYLOAD='a json object goes here!' 
curl: (52) Empty reply from server 
[1]+ Done     nc -l 8888 > /tmp/ncout 2>&1 < /dev/null 
[email protected] ~ $ cat /tmp/ncout 
POST/HTTP/1.1 
Host: localhost:8888 
User-Agent: curl/7.43.0 
Accept: */* 
X-apiKey:jamesBond007 
Content-Length: 73 
Content-Type: application/x-www-form-urlencoded 

MESSAGE-TYPE=pub.controller.user.created&PAYLOAD=a json object goes [email protected] ~ $ 
+0

Так что, в принципе, у меня должно быть две пары ключевых значений для приложения/x-www-form-urlencoded? это тип сообщения и полезная нагрузка? – SenseiTester

+0

Да, x-www-form-urlencoded кодирует данные POST так же, как если бы это был GET - с ключами/значениями, экранированными URL-адресами, и их разделение. –

1

Вот пример того, как сделать это UrlEncode с питоном:

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
> data = {'MESSAGE-TYPE': "pub.controller.user.created", 'PAYLOAD': 'a json object goes here!'} 
> from urllib import urlencode 
> urlencode(data) 
PAYLOAD=a+json+object+goes+here%21&MESSAGE-TYPE=pub.controller.user.created 
Смежные вопросы