以下命令有效,但我无法使用python-requests(2.18.4)重现它:
curl -X POST -H "Authorization: Bearer ..." \
-H "Content-Type: multipart/form-data" \
-F 'metadata={...}
-F 'data=@data.bz2;type=application/octet-stream'
https://www....com
使用下面的send_devices,我收到"不支持的媒体类型""
def send_devices(basic_auth):
endpoint_api = ' https://www....com'
with open('data.bz2','rb') as payload:
response = requests.post(endpoint_api, data={'metadata': ...,
'data': payload},
headers={'Authorization': 'Bearer {0}'.format(basic_auth})
经过一些评论后,我也尝试了,现在的错误是"无效的元数据Json字符串":
def send_devices(basic_auth):
endpoint_api = ' https://www....com'
files = {'file': ('data.bz2', open('data.bz2', 'rb'), 'application/octet-stream')}
response = requests.post(endpoint_api, data={"metadata": {"extensions":{"urnType":"IDFA"}}},
files=files, headers={'Authorization': 'Bearer {0}'.format(basic_auth)})
答案 0 :(得分:1)
确保有效负载格式正确。您的有效负载中的第二个对象中似乎缺少“{”。
HTTP 415不支持的媒体类型客户端错误响应代码表示服务器拒绝接受请求,因为有效内容格式的格式不受支持。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415
答案 1 :(得分:1)
你应该把它作为文件(而不是数据)。
r = requests.post(url, files={'file': open('data.bz2', 'rb')})
工作正常。
答案 2 :(得分:1)
在第一个示例中,缺少文件类型
html, body {
margin: 0;
}
.homepage-top .wrapper {
position: relative;
}
.homepage-top .wrapper:after {
padding-top: 50%;
display: block;
content: ' ';
}
.homepage-top .flex-container {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
padding: 5px;
display: flex;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
.homepage-top .flex-container>div {
height: 100%;
display: flex;
flex-direction: column;
}
.homepage-top .flex-container>div>div {
margin: 5px;
display: flex;
}
.homepage-grid-left-col {
width: 50.5%;
}
/*Slider styling */
.homepage-grid-left-col .homepage-grid-left-row {
width: 98.5%;
}
.homepage-grid-left-slider {
height: 100%;
display: flex;
overflow: hidden;
}
.slick-slide .slide1 {
background-image: url("http://p-hold.com/585/540");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
padding-top: 78.5%;
}
.slick-slide .slide2 {
background-image: url("http://p-hold.com/585/540");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
padding-top: 72.5%;
}
.slick-slide .slide3 {
background-image: url("http://p-hold.com/585/540");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
padding-top: 78.5%;
}
.slick-slide .grid-title h2 {
font-size: 1.5em;
color: #fff;
text-shadow: 2px 2px #000;
}
.slick-slide .grid-title {
padding: 2% 3% 7% 3%;
background: -moz-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 15%, rgba(0, 0, 0, 0.75) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, transparent), color-stop(15%, rgba(0, 0, 0, 0.40)), color-stop(100%, rgba(0, 0, 0, 0.75)));
background: -webkit-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 15%, rgba(0, 0, 0, 0.75) 100%);
background: -o-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 15%, rgba(0, 0, 0, 0.75) 100%);
background: -ms-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 15%, rgba(0, 0, 0, 0.75) 100%);
background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.40) 15%, rgba(0, 0, 0, 0.75) 100%) filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#a6000000', GradientType=0);
}
.slick-dots li button {
border: 3px solid #fff;
border-radius: 50%;
}
.slick-dots li button::before {
color: transparent;
background: transparent;
}
.slick-dots li button:focus::before {
opacity: 0;
color: transparent;
background: transparent;
border-radius: 50%;
}
.slick-dots li button:hover::before, .slick-dots li.slick-active button::before {
opacity: 1;
color: #fff;
background: #fff;
border-radius: 50%;
}
.slick-dots {
bottom: 55px;
}
.slick-prev, .slick-next {
color: #fff;
}
.slick-prev {
left: 10px;
z-index: 10;
}
.slick-next {
right: 10px;
z-index: 10;
}
.homepage-grid-right-col {
width: 49.5%;
}
.homepage-grid-right-col .homepage-grid-top-right {
height: 50%;
background: #ddd;
background-image: url("http://p-hold.com/585/265");
background-size: cover;
background-position: center;
}
.homepage-grid-right-col .homepage-grid-bottom-right {
height: 50%;
}
.homepage-grid-bottom-right-inner, .grid-right {
flex: 1;
display: flex;
}
.homepage-grid-bottom-right-inner .grid-left {
width: 50%;
margin-right: 5px;
background-image: url("http://p-hold.com/280/270");
background-size: cover;
background-position: center;
}
.homepage-grid-bottom-right-inner .grid-right {
width: 50%;
background: #ddd;
margin-left: 5px;
background-image: url("http://p-hold.com/280/270");
background-size: cover;
background-position: center;
}
.homepage-grid-top-right .grid-title {
height: 45%;
width: 100%;
padding: 10px 20px;
display: inline-block;
background: -moz-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 10%, rgba(0, 0, 0, 0.75) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, transparent), color-stop(10%, rgba(0, 0, 0, 0.40)), color-stop(100%, rgba(0, 0, 0, 0.75)));
background: -webkit-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 10%, rgba(0, 0, 0, 0.75) 100%);
background: -o-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 10%, rgba(0, 0, 0, 0.75) 100%);
background: -ms-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 10%, rgba(0, 0, 0, 0.75) 100%);
background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.40) 10%, rgba(0, 0, 0, 0.75) 100%) filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#a6000000', GradientType=0);
}
.homepage-grid-bottom-right .grid-right .grid-title {
height: 45%;
width: 100%;
padding: 10px 20px;
display: inline-block;
background: -moz-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 5%, rgba(0, 0, 0, 0.75) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, transparent), color-stop(5%, rgba(0, 0, 0, 0.40)), color-stop(100%, rgba(0, 0, 0, 0.75)));
background: -webkit-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 5%, rgba(0, 0, 0, 0.75) 100%);
background: -o-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 5%, rgba(0, 0, 0, 0.75) 100%);
background: -ms-linear-gradient(top, transparent 0, rgba(0, 0, 0, 0.40) 5%, rgba(0, 0, 0, 0.75) 100%);
background: linear-gradient(to bottom, transparent 0, rgba(0, 0, 0, 0.40) 5%, rgba(0, 0, 0, 0.75) 100%) filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#a6000000', GradientType=0);
}
.homepage-grid-top-right .grid-title, .homepage-grid-bottom-right .grid-right .grid-title {
align-self: flex-end;
}
.homepage-grid-left-col .grid-title h2, .homepage-grid-top-right .grid-title h2, .homepage-grid-bottom-right-inner .grid-right .grid-title h2 {
font-size: 1.5em;
color: #fff;
text-shadow: 2px 2px #000;
}
@media (max-width: 1200px) {
.homepage-grid-top-right .grid-title {
height: 55%;
}
.homepage-grid-bottom-right .grid-right .grid-title {
height: 70%;
}
}
@media (max-width: 992px) {
.homepage-grid-left-col {
width: 98.5%;
}
.homepage-grid-right-col {
width: 100%;
}
.homepage-top .wrapper:after {
padding-top: 100%;
display: block;
content: ' ';
margin-bottom: 99%;
}
.homepage-grid-right-col .homepage-grid-top-right {
height: 70%;
}
.homepage-grid-right-col .homepage-grid-bottom-right {
height: 70%;
}
.homepage-grid-top-right .grid-title, .homepage-grid-bottom-right .grid-right .grid-title {
height: 40%;
}
}
@media (max-width: 768px) {
.homepage-grid-top-right .grid-title, .homepage-grid-bottom-right .grid-right .grid-title {
height: 95%;
}
}
在第二个示例中,需要在相同的文件dict上添加额外的帖子数据。即使不是一个字典:
'data': ('data.bz2', open('data.bz2', 'rb'), 'application/octet-stream'),
解决方案:
'metadata': ('metadata.csv', json.dumps({"extensions": ...}))}