2012-08-17 23:23:02 +02:00
|
|
|
import json
|
|
|
|
import sys
|
|
|
|
from pprint import pformat
|
|
|
|
|
|
|
|
import requests
|
|
|
|
import requests.auth
|
2012-08-18 23:03:31 +02:00
|
|
|
from requests.defaults import defaults
|
2012-08-17 23:23:02 +02:00
|
|
|
|
2012-08-18 23:03:31 +02:00
|
|
|
from . import sessions
|
|
|
|
from . import __version__
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
FORM = 'application/x-www-form-urlencoded; charset=utf-8'
|
|
|
|
JSON = 'application/json; charset=utf-8'
|
2012-08-18 23:03:31 +02:00
|
|
|
DEFAULT_UA = 'HTTPie/%s' % __version__
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
|
2012-09-17 02:15:00 +02:00
|
|
|
def get_response(args, config_dir):
|
2012-09-07 12:38:52 +02:00
|
|
|
"""Send the request and return a `request.Response`."""
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
requests_kwargs = get_requests_kwargs(args)
|
|
|
|
|
|
|
|
if args.debug:
|
|
|
|
sys.stderr.write(
|
|
|
|
'\n>>> requests.request(%s)\n\n' % pformat(requests_kwargs))
|
|
|
|
|
2012-09-17 00:37:36 +02:00
|
|
|
if not args.session and not args.session_read_only:
|
2012-12-01 15:55:58 +01:00
|
|
|
response = requests.request(**requests_kwargs)
|
2012-09-07 12:38:52 +02:00
|
|
|
else:
|
2012-12-01 15:55:58 +01:00
|
|
|
response = sessions.get_response(
|
2012-09-17 02:15:00 +02:00
|
|
|
config_dir=config_dir,
|
2012-09-17 00:01:49 +02:00
|
|
|
name=args.session or args.session_read_only,
|
2012-09-07 12:38:52 +02:00
|
|
|
request_kwargs=requests_kwargs,
|
2012-09-17 00:01:49 +02:00
|
|
|
read_only=bool(args.session_read_only),
|
2012-09-07 12:38:52 +02:00
|
|
|
)
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
|
2012-12-01 15:55:58 +01:00
|
|
|
return response
|
|
|
|
|
|
|
|
|
2012-08-17 23:23:02 +02:00
|
|
|
def get_requests_kwargs(args):
|
2012-09-07 12:38:52 +02:00
|
|
|
"""Translate our `args` into `requests.request` keyword arguments."""
|
2012-08-17 23:23:02 +02:00
|
|
|
|
2012-08-18 23:03:31 +02:00
|
|
|
base_headers = defaults['base_headers'].copy()
|
|
|
|
base_headers['User-Agent'] = DEFAULT_UA
|
|
|
|
|
2012-08-17 23:23:02 +02:00
|
|
|
auto_json = args.data and not args.form
|
|
|
|
if args.json or auto_json:
|
2012-08-18 23:03:31 +02:00
|
|
|
base_headers['Accept'] = 'application/json'
|
|
|
|
if args.data:
|
|
|
|
base_headers['Content-Type'] = JSON
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
if isinstance(args.data, dict):
|
2012-12-01 15:55:58 +01:00
|
|
|
if args.data:
|
|
|
|
args.data = json.dumps(args.data)
|
|
|
|
else:
|
|
|
|
# We need to set data to an empty string to prevent requests
|
|
|
|
# from assigning an empty list to `response.request.data`.
|
|
|
|
args.data = ''
|
2012-08-17 23:23:02 +02:00
|
|
|
|
2012-08-18 23:03:31 +02:00
|
|
|
elif args.form and not args.files:
|
2012-09-07 12:48:59 +02:00
|
|
|
# If sending files, `requests` will set
|
|
|
|
# the `Content-Type` for us.
|
|
|
|
base_headers['Content-Type'] = FORM
|
2012-08-17 23:23:02 +02:00
|
|
|
|
|
|
|
credentials = None
|
|
|
|
if args.auth:
|
|
|
|
credentials = {
|
|
|
|
'basic': requests.auth.HTTPBasicAuth,
|
|
|
|
'digest': requests.auth.HTTPDigestAuth,
|
|
|
|
}[args.auth_type](args.auth.key, args.auth.value)
|
|
|
|
|
|
|
|
kwargs = {
|
|
|
|
'prefetch': False,
|
|
|
|
'method': args.method.lower(),
|
|
|
|
'url': args.url,
|
|
|
|
'headers': args.headers,
|
|
|
|
'data': args.data,
|
|
|
|
'verify': {
|
|
|
|
'yes': True,
|
|
|
|
'no': False
|
2012-08-21 15:45:22 +02:00
|
|
|
}.get(args.verify, args.verify),
|
2012-08-17 23:23:02 +02:00
|
|
|
'timeout': args.timeout,
|
|
|
|
'auth': credentials,
|
|
|
|
'proxies': dict((p.key, p.value) for p in args.proxy),
|
|
|
|
'files': args.files,
|
2012-09-07 11:58:39 +02:00
|
|
|
'allow_redirects': args.follow,
|
2012-08-18 23:03:31 +02:00
|
|
|
'params': args.params,
|
|
|
|
'config': {
|
|
|
|
'base_headers': base_headers
|
|
|
|
}
|
2012-08-17 23:23:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return kwargs
|