繁体   English   中英

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

[英]Laravel + Python request not working but in Postman it works

我正在尝试从我的树莓派上用 python 脚本发送一些数据,我已经有一个类似的问题,有些人回答我不是我想要的,但它的工作原理你可以在这里检查它是我正在尝试的进行base64编码发送然后解码并保存它,现在我正在尝试不同的方式我试图在multipart/form-data数据中发送一些数据问题是在我尝试时在我的python脚本中发送视频似乎没有发送任何视频,但是当我从 Postman 发送它时效果很好,我试图查看 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)

我正在做的事情的邮递员图片:查看 imgur.com 上的帖子

这是我的 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);

ps我已经试过

所以我犯了一些错误,我并没有真正得到相同的结果,但它有效,首先我改变了这个:

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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM