2014-02-12 1 views
0

У меня есть сценарий Unix, который генерирует URL и выполняет его:Python просить похож на мой UNIX завиток сценарий

export url='http://test.com'; 
export job_name='MY_JOB_NAME'; 

jso="{\"parameter\": [{\"name\":\"BRANCH\",\"value\":\"master\"}, {\"name\":\"GITURL\",\"value\":\"https://github.test.com/test/test.git\"}]}"; 

curl $url/job/$job_name/build --data-urlencode json="$jso"; 

Я хочу сделать то же самое в Python, и я попытался с помощью «запросы» и 'urllib2', но они, похоже, не образуют точно такой же запрос.

Вот что я пробовал:

import requests 
import json 

url='http://test.com/job/MY_JOB_NAME/build' 

params=[{'name':'BRANCH', 'value':'master'}, {'name':'GITURL', 'value':'https://github.test.ebay.com/test/test.git'}] 
payload = json.dumps(params) 
resp = requests.post(url, data={'json':payload}) 

я делаю что-то здесь?

ответ

2

Если мы попали на тестовый сервер с вашим запросом на завивание, мы увидим, что вы выполняете POSTING поле данных формы с именем json со значением строки, закодированной в JSON.

~$ curl http://httpbin.org/post --data-urlencode json='{"foo": "bar"}' 
{ 
    "url": "http://httpbin.org/post", 
    "json": null, 
    "args": {}, 
    "form": { 
    "json": "{\"foo\": \"bar\"}" 
    }, 
    "origin": "0.0.0.0", 
    "data": "", 
    "headers": { 
    "Connection": "close", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "X-Request-Id": "1b5f0122-9e63-4e58-adff-e59c24f086e5", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.30.0", 
    "Content-Length": "35", 
    "Accept": "*/*" 
    }, 
    "files": {} 
} 

С учетом сказанного, основное различие я вижу между завитка сценария и вашего питона сценария структура JSON закодированных данных вы проводки.

Ваш локон скрипт отправляю это:

{ 
    "parameters": [{ 
    "name": "BRANCH", 
    "value": "foo", 
    }, 
    { 
    "name": "GITURL", 
    "value": "git://example.com/repo", 
    }] 
} 

Ваш запрос кода проводки

{ 
    "name": "BRANCH", 
    "value": "foo" 
} 

Так вы не размещая одни и те же данные. Если вы скопируете и вставьте структуру, в которой я и использую json.dumps, то с правильными данными, ваш звонок на request.post должен работать. Остальная часть на 100% правильная.

+0

Мой ответ неправильный, я знаю. Раньше был еще один ответ, с которым согласился OP, но он отсутствует сейчас. – laike9m

+0

Отредактировал мою полезную нагрузку json, чтобы сопоставить ее с полезной нагрузкой curl json. Я до сих пор не вижу успешного выполнения URL-адреса. –

+0

@PiHorse, если отредактированный вопрос - это то, что вы пытались, то вы не отправляете права. Вы должны JSON кодировать '{'parameters': [{...}, {...}]}'. –

-1

Попробуйте это:

params={'BRANCH':'master', 'GITURL':'https://github.test.com/test/test.git'} 
resp = requests.post(url, data=payload) 

См requests:post-a-multipart-encoded-file Там нет необходимости сбрасывать данные в формате JSON, так как

Ваш словарь данных будет автоматически форма кодированного когда запрос сделано

Я много раз пользовался запросами, и просто прохождение dict всегда Работа.

+0

См. Мой ответ. OP не пытается опубликовать многострочный кодированный файл и просто использовать параметр данных, как вы предложили, не будет работать. Вы не читали вопрос OPs достаточно близко, и вы не пытались понять, что именно они делают. –

Смежные вопросы