Laravel + Python请求不起作用,但在Postman中它起作用

时间:2018-02-15 21:56:02

标签: python post request postman

我试图用我的覆盆子pi中的python脚本发送一些数据,我已经有了类似的问题,而且有些人回答我的不是我想要的东西,但有些工作你可以查一下{{3我试图让base64编码发送然后解码并保存它,现在我尝试以不同的方式尝试在multipart/form-data中发送一些数据问题是,在我的python脚本中,当我试图发送视频时,它似乎没有发送任何视频,但是当我从Postman发送它完美地工作时,我试图看看代码是什么在邮差上。

这是将邮件发送到我的php服务器的邮递员代码

import requests

url = "http://192.168.1.208:8080/api/createvideo"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"files\"; filename=\"20180215-033512.mp4\"\r\nContent-Type: video/mp4\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"ip_address\"\r\n\r\n10.10.10.110\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"date\"\r\n\r\n2018-02-14 18:27:20\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'Accept': "application/json",
    'Content-Type': "application/x-www-form-urlencoded",
    'Cache-Control': "no-cache",
    'Postman-Token': "50de5d50-e0f9-d2ab-6b37-aee8aa127bb3"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

我正在做的事情的邮差形象: here

这里是我的python代码,我在这里构建请求:

 file = {'files': open(filename,"rb"),
         'date': file = {'file': open(filename,'rb'),
         'ip_address': self.api.get_ip()}
 r = self.api.postvideo(file)

发布请求服务代码:

def postvideo(self, file):
        return requests.post(self.url+'createdevice',files=file)

为什么在Postman中会很好,我想知道我错过了什么,因为当它到达我的Laravel服务器时它显示为空,这就是我在Laravel中所做的事情

if ($request->hasFile('files')) {
            $device = Device::where('ip_address',request('ip_address'))->first();

            $path = public_path().'/video/'.$device->id.'/';
            $file = str_random(8).'.mp4';
            $file_name = $path.$file;

            $request->file('files')->move($path,$file);
            $video = Video::create([
                'date' => request('date'),
                'device_id' => $device->id,
                'video' => $file_name
            ]);

            return response()->json([ 'data' => $video]);
        }

        return response()->json([ 'data' => 'No Video Attach'],404);

p.s我已经尝试了View post on imgur.com

1 个答案:

答案 0 :(得分:1)

所以我做了一些错误,我没有真正做出相同的结果,但它确实有效,首先我改变了这个:

file = {'files': open(filename,"rb"),
         'date': file = {'file': open(filename,'rb'),
         'ip_address': self.api.get_ip()}

为此你可以看到我拆分数据和文件:

file = {'files': ('video.mp4',open(filename,"rb"))}
data = {'date': file = {'file': open(filename,'rb'),
             'ip_address': self.api.get_ip()}

我真的不知道发生了什么,但我之前也做了time.sleep因为我正在使用子进程,显然视频无法在阅读模式下使用它以便帮助我也是。

还有其他的事情要发布这样的帖子请求:

return requests.post(self.url+'createvideo',files=file,data=data)

我这样做是为了当它到达Laravel时我可以像这样使用它们:

这是读取文件并重新定位

$request->file('files')->move($path,$file);

这是为了获取任何数据:

$request->input('ip_address')