[英]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.