2016-04-14 8 views
1

Я пытаюсь преобразовать следующий PHP curl_setopt() эквиваленту в Python Requests, а также для CLI свернуться. Для Python, если это невозможно в Requests, я буду использовать pycurl.Преобразование PHP curl_setopt() для запросов на Python и CLI локон

curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 

Здесь работает PHP локон код:

$params = array(
    'username' => $username, 
    'password' => $password 
); 

$params_string = json_encode($params); 

$process = curl_init($url); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($process, CURLOPT_POSTFIELDS, $params_string); 

$headers = array(); 
$headers[] = 'Content-Type: application/json'; 
curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 

$data = curl_exec ($process); 

curl_close ($process); 

Я в недоумении, что мне нужно, чтобы установить в Python просит для тех, кто два PHP curl_setopt (ов).

И я попробовал следующее CLI завитка, но я получил Bad Request ошибку в:

AUTHENTICATE_DATA="usename=${USERNAME}&password=${PASSWORD}" 

AUTHENTICATE_RESPONSE=$(curl \ 
    -X POST \ 
    -H 'Content-Type: application/json' \ 
    --data-urlencode "${AUTHENTICATE_DATA}" \ 
    -v \ 
    ${AUTHENTICATE_URL}) 

echo ${AUTHENTICATE_RESPONSE} 

Что мне нужно сделать?

Спасибо, оцените помощь.

ответ

0
curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 

Эта опция просто говорит о том, что результат curl_exec() передается переменной возвращаемого значения. В командной строке по умолчанию выводится на стандартный вывод.

curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 

Это очень плохая идея и сделает вас уязвимыми для атак типа «человек в середине». Нет никакого оправдания использовать его. --insecure - эквивалентная опция командной строки.

Также стоит упомянуть, что вы передаете строку JSON в качестве параметра для CURLOPT_POSTFIELDS, что недействительно, и нет кодировки JSON с кодом CLI, который у вас есть.

2

Использование запросов:

import requests 

url = 'https://...' 
username = 'username' 
password = 'supersecret' 

# curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
# PHP bashing time: Who in their right minds would create a function 
# that spews its return value to stdout by default, unless explicitly 
# instructed not to do so. 
resp = requests.post(

    # $process = curl_init($url); 
    url, 

    # $params = array(
    # 'username' => $username, 
    # 'password' => $password 
    #); 
    # $params_string = json_encode($params); 
    # curl_setopt($process, CURLOPT_POSTFIELDS, $params_string); 
    # $headers[] = 'Content-Type: application/json'; 
    # curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 
    json=dict(username=username, password=password), 

    # curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); 
    # note: you shouldn't do this, really 
    verify=False, 

) 

data = resp.text 
# or if you expect json response 
data = resp.json() 
+0

Thx, это прекрасно работает, и изменилось, как предложено 'проверить = true'. – jeff00seattle

+0

Вы можете пропустить его вообще, это по умолчанию «True». Вы также можете использовать его для передачи ["пути к файлу или каталогу CA_BUNDLE с сертификатами доверенных ЦС"] (http://www.python-requests.org/en/master/user/advanced/). –

+0

Функции PHP - это взаимно однозначные сопоставления функций API cURL, поэтому они могут действовать не совсем разумно! Есть лучшие, более современные способы обработки HTTP-запросов в PHP. – miken32