gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:54 25 4
gpt4 key购买 nike

我正在尝试用 python 脚本从我的树莓派发送一些数据,我已经有一个类似的问题,有些人的回答不是我想要的,但它确实有效,你可以检查一下 here问题是我试图进行 Base64 编码发送它,然后解码它并保存它,现在我正在尝试一种不同的方式我试图在 multipart/form-data 问题是,在我的 python 脚本中,当我尝试发送视频时,它似乎没有发送任何视频,但是当我从 Postman 发送它时效果很好,我试图查看 Postman 上的代码是什么。

这是将其发送到我的 php 服务器的 postman 代码

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)

我正在做的事情的 postman 图片: View post on 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);

p.s我已经尝试过this

最佳答案

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

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

关于python - Laravel + Python 请求不起作用,但在 Postman 中它起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com