英文:
Convert curl command with form files into python requests
问题
Here's the translation of the provided text:
我有以下的curl命令:
curl -X POST "_my_username_:_my_password_@10.2.25.209:5601/api/saved_objects/_import" -H "kbn-xsrf: true" --form file=@V:kibana\IndexPatterns\events.ndjson
这个命令完美地工作(将索引模式导入到Elasticsearch),但我试图将其转换为Python的requests请求。我尝试了几种方法,包括以下方式:
files = {'file': '@' + args.kibana_index_pattern_path}
res = requests.post("http://{0}:{1}@{2}:5601/api/saved_objects/_import".format(args.elastic_username, args.elastic_password, args.kibana_host),
headers={'kbn-xsrf': 'true'}, data=files)
files = {'file': '@' + args.kibana_index_pattern_path}
res = requests.post("http://{0}:{1}@{2}:5601/api/saved_objects/_import".format(args.elastic_username, args.elastic_password, args.kibana_host),
headers={'kbn-xsrf': 'true', 'Content-Type': 'text/plain'}, files=files)
不同的组合,包括使用或不使用@
,将files参数作为字符串而不是字典等。我一直收到错误的请求和无效的内容类型错误(例如:{'message': 'Unsupported Media Type', 'error': 'Unsupported Media Type', 'statusCode': 415})。
请注意,有一些工具可以将curl转换为requests请求,但我尝试的所有工具都不识别files参数,要么忽略它,要么抛出异常。然而,命令本身是有效的。
我在这里做错了什么?
英文:
I have the following curl command:
curl -X POST "_my_username_:_my_password_@10.2.25.209:5601/api/saved_objects/_import" -H "kbn-xsrf: true" --form file=@V:kibana\IndexPatterns\events.ndjson
Which works perfectly (import index pattern into elasticsearch), but I'm trying to convert it to Python requests. I tried several ways, including the following:
files = {'file': '@' + args.kibana_index_pattern_path}
res = requests.post("http://{0}:{1}@{2}:5601/api/saved_objects/_import".format(args.elastic_username, args.elastic_password, args.kibana_host),
headers={'kbn-xsrf': 'true'}, data=files)
files = {'file': '@' + args.kibana_index_pattern_path}
res = requests.post("http://{0}:{1}@{2}:5601/api/saved_objects/_import".format(args.elastic_username, args.elastic_password, args.kibana_host),
headers={'kbn-xsrf': 'true', 'Content-Type': 'text/plain'}, files=files)
With different combinations of with or without the @
, files as a single string instead of dictionary, ect. I keep getting errors on bad requests and invalid content types (for example: {'message': 'Unsupported Media Type', 'error': 'Unsupported Media Type', 'statusCode': 415}).
Note that there are some tools to convert curl to requests, but all the ones I tried don't recognize the files param, either ignoring it or throwing exception. The command itself, however, works.
What am I doing wrong here?
答案1
得分: 1
尝试以下操作:
import requests
from requests.auth import HTTPBasicAuth
用户名 = '_my_username_'
密码 = '_my_password_'
标头 = {'kbn-xsrf': 'true'}
上传URL = "http://10.2.25.209:5601/api/saved_objects/_import"
文件 = {'file': open('V:\algotec\analytics\install\Kibana\IndexPatterns\events.ndjson', 'rb')}
r = requests.post(上传URL, headers=标头, auth=HTTPBasicAuth(用户名, 密码), files=文件)
print(r.status_code)
如果您收到以下错误的坏请求:
错误: 'Bad Request',消息: '请求必须包含 kbn-xsrf
头。'
请根据以下内容修改标头信息并重试:
标头 = {
'Content-Type': 'application/x-ndjson',
'kbn-xsrf': 'anything',
'Accept': 'application/x-ndjson'
}
英文:
Try the following:
import requests
from requests.auth import HTTPBasicAuth
username = '_my_username_'
password = '_my_password_'
headers = {'kbn-xsrf': 'true'}
upload_url = "http://10.2.25.209:5601/api/saved_objects/_import"
files = {'file': open('V:\algotec\analytics\install\Kibana\IndexPatterns\events.ndjson', 'rb')}
r = requests.post(upload_url, headers=headers, auth=HTTPBasicAuth(username, password), files=files)
print(r.status_code)
If you receive a bad request with this error
> error: 'Bad Request', message: 'Request must contain a kbn-xsrf
> header.'
Modify the header information as per the below and re-try.
headers = {
'Content-Type': 'application/x-ndjson',
'kbn-xsrf': 'anything',
'Accept': 'application/x-ndjson'
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论