Data request not working

Summary.

I was sending data via parameter, example : 

```python
data = {'req': 'ls -alt'}
r = requests.post(url, data=data, headers=headers)
```

 and such. for some reason, only when i send ls does it work, but ls -alt returns nothing. I did an echo server, and it claimed that it was an JSON object? so i tried json=data but it returned bad request on the target.```

## Expected Result
```
drwxr-xr-x 2 root root 4096 Sep blah 10:03 .
-rw-r--r-- 1 root root  558 Sep blah 10:03 file
-rw-r--r-- 1 root root 1555 Sep blah 16:16 file
drwxr-xr-x 4 root root 4096 Sep blah 19:11 ..
```


What you expected.
I expected a directory string to come forth, instead received nothing

## Actual Result
blank output on real test,

on echo server: 
```
Exception happened during processing of request from ('127.0.0.1', 59256)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 652, in __init__
    self.handle()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle
    self.handle_one_request()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request
    method()
  File "echo.py", line 35, in do_POST
    data = json.loads(post_body)
  File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
```

doing it manually via curl produces the result i want:
```
curl --data "req=ls -alt" http://server:blah/req.php
```
produces :
```
drwxr-xr-x 2 root root 4096 Sep blah 10:03 .
-rw-r--r-- 1 root root  558 Sep blah 10:03 file
-rw-r--r-- 1 root root 1555 Sep blah 16:16 file
drwxr-xr-x 4 root root 4096 Sep blah 19:11 ..
```
as expected
----------------------------------------


What happened instead.

I got nothing on the real world object that i designed, and that error on my echo server. 

## Reproduction Steps

```python
#!/usr/bin/env python
import requests
import argparse
import urllib
import socket
parser = argparse.ArgumentParser()
parser.add_argument("-t", help="target", dest="target", required=True)
parser.add_argument("-p", help="port", dest="port", required=True)
parser.add_argument("-c", help="command", dest="command", required=False, type=str)
args = parser.parse_args()
data = {'cmd': 'ls -alt'}
headers = {'User-Agent': 'send/1.0'}
print requests.post("http://{}:{}/recv.php".format(args.target, args.port), data=data, headers=headers).text
```

## System Information

    $ python -m requests.help

```
{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": "1.9"
  },
  "idna": {
    "version": ""
  },
  "implementation": {
    "name": "CPython",
    "version": "2.7.13"
  },
  "platform": {
    "release": "4.12.0-kali1-amd64",
    "system": "Linux"
  },
  "pyOpenSSL": {
    "openssl_version": "1010006f",
    "version": "16.2.0"
  },
  "requests": {
    "version": "2.18.4"
  },
  "system_ssl": {
    "version": "1010006f"
  },
  "urllib3": {
    "version": "1.22"
  },
  "using_pyopenssl": true
}
```

This command is only available on Requests v2.16.4 and greater. Otherwise,
please provide some basic information about your system (Python version,
operating system, &c).

I updated your issue to correct your formatting. I'm not reading through it in earnest to see if we can understand the bug you're reporting.

So if I do:

```
$ curl --data 'foo=ls -alt' https://httpbin.org/post
```

I see

```
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "foo": "ls -alt"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Connection": "close", 
    "Content-Length": "11", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.51.0"
  }, 
  "json": null, 
  "origin": "my-ip", 
  "url": "https://httpbin.org/post"
}
```

If I then do 

```py
import requests
print requests.post('https://httpbin.org/post', data={'foo': 'ls -alt'}).text
```

I see the same output:

```py
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "foo": "ls -alt"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "close", 
    "Content-Length": "11", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.13.0"
  }, 
  "json": null, 
  "origin": "my-input", 
  "url": "https://httpbin.org/post"
}
```

The only difference I see between your curl command Requests usage is the addition of a user-agent header. Does the server you're talking to care about the User-Agent header?

Further, when I specified `-v` to curl, I noticed it said it was uploading 11 bytes from `--data`. That means it might not have encoded the ` ` in the data. Requests will encode it. You can see the exact data Requests sends like so:

```py
>>> r = requests.post('https://httpbin.org/post', data={'foo': 'ls -alt'})
>>> r.request.body
'foo=ls+-alt'
```

So perhaps the server you're talking to isn't unencoding it and that's the source of your problem. As far as I can tell this is not a bug in Requests.

Is it possible to stop encoding the data request?

a no user agent means nothing, its just there for randomeness

Cause the PHP script just takes the DATA request. the data request sent from requests is encoded, i dont want it to be.

Its wierd, i get nothing in response...

What you want is `requests.post(url, json=data)`

Just did that, now i get "unsupported subtype : json" :/