= Python PycURL
/via: [[https://www.rapidseedbox.com/blog/python-curl]]
* requests: [[info:cursos:pue:python-pcpp1:m4:1.6|]]
== setup
* PycURL es un intefaz python para interactuar con cURL (más completa/compleja que **requests**)
* sudo apt install libcurl4-openssl-dev libssl-dev
* pip install pycurl
== comandos básicos con requests
* # Basic Commands with Requests
import requests
get_response = requests.get('https://sampleurl.com')
print(get_response.text)
* # POST Request with Requests
import requests
payload = {'param': 'value'}
post_response = requests.post('https://sampleurl.com', data=payload)
print(post_response.text)
* import requests
try:
get_response = requests.get('https://example.com')
get_response.raise_for_status()
print(get_response.text)
except requests.exceptions.HTTPError as http_err:
print(f'HTTP error occurred: {http_err}')
except Exception as err:
print(f'Other error occurred: {err}')
== comandos básicos con pycurl
* # GET Request with PyURL
from pycurl import Curl
from io import BytesIO
curl_obj = Curl()
response_buffer = BytesIO()
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com')
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
curl_obj.close()
response_body = response_buffer.getvalue().decode('utf-8')
print(response_body)
* # POST Request with PycURL
from pycurl import Curl
from io import BytesIO
from urllib.parse import urlencode
curl_obj = Curl()
response_buffer = BytesIO()
payload = {'param': 'value'}
encoded_payload = urlencode(payload)
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com')
curl_obj.setopt(curl_obj.POSTFIELDS, encoded_payload)
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
curl_obj.close()
response_body = response_buffer.getvalue().decode('utf-8')
print(response_body)
* # Handling Responses with PycURL
from pycurl import Curl
from io import BytesIO
curl_obj = Curl()
response_buffer = BytesIO()
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com')
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
http_code = curl_obj.getinfo(curl_obj.RESPONSE_CODE)
curl_obj.close()
if http_code == 200:
print("Success:", response_buffer.getvalue().decode('utf-8'))
else:
print("Error:", http_code)
== comandos avanzados con requests
* Enviando JSON:import requests
payload = {'param': 'value'}
post_response = requests.post('https://sampleurl.com', json=payload)
print(post_response.text)
* Enviando cabeceras:import requests
headers = {
'User-Agent': 'CustomUserAgent',
'Accept': 'application/json'
}
get_response = requests.get('https://sampleurl.com', headers=headers)
print(get_response.text)
* Enviando fichero:import requests
files = {'file': open('path/to/your/file.txt', 'rb')}
post_response = requests.post('https://sampleurl.com/upload', files=files)
print(post_response.text)
* Recibiendo fichero:import requests
files = {'file': open('path/to/your/file.txt', 'rb')}
post_response = requests.post('https://sampleurl.com/upload', files=files)
print(post_response.text)
== comandos avanzados con pycurl
* Enviando JSON:from pycurl import Curl
from io import BytesIO
import json
curl_obj = Curl()
response_buffer = BytesIO()
payload = {'param': 'value'}
postfields = json.dumps(payload)
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com')
curl_obj.setopt(curl_obj.POSTFIELDS, postfields)
curl_obj.setopt(curl_obj.HTTPHEADER, ['Content-Type: application/json'])
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
curl_obj.close()
response_body = response_buffer.getvalue().decode('utf-8')
print(response_body)
* Enviando cabeceras:from pycurl import Curl
from io import BytesIO
curl_obj = Curl()
response_buffer = BytesIO()
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com')
curl_obj.setopt(curl_obj.HTTPHEADER, ['User-Agent: CustomUserAgent', 'Accept: application/json'])
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
curl_obj.close()
response_body = response_buffer.getvalue().decode('utf-8')
print(response_body)
* Enviando fichero:from pycurl import Curl
curl_obj = Curl()
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com/upload')
curl_obj.setopt(curl_obj.HTTPPOST, [('file', (curl_obj.FORM_FILE, 'path/to/your/file.txt'))])
curl_obj.perform()
curl_obj.close()
* Recibiendo fichero:from pycurl import Curl
from io import BytesIO
curl_obj = Curl()
response_buffer = BytesIO()
curl_obj.setopt(curl_obj.URL, 'https://sampleurl.com/file.txt')
curl_obj.setopt(curl_obj.WRITEDATA, response_buffer)
curl_obj.perform()
curl_obj.close()
with open('downloaded_file.txt', 'wb') as f:
f.write(response_buffer.getvalue())
== varis
* problemas con certificados: [[https://pypi.org/project/certifi/]]