gpt4 book ai didi

java - OneDrive REST API 为文件上传提供 400 个无效动词

转载 作者:行者123 更新时间:2023-11-30 03:34:09 24 4
gpt4 key购买 nike

我正在尝试使用 REST API 将文件上传到 OneDrive。下面的代码打开一个到 OneDrive 主机的套接字,并向其提供 OneDrive doc 中示例的有效负载。 ,但 OneDrive 返回 400 状态并显示“无效动词”消息。

我知道访问 token 是有效的,因为 GET 调用有效。访问 token 具有以下范围:wl.offline_accesswl.skydrive_update

我尝试过对其他文件夹进行 GETting、PUTting 和 POSTing,GET 有效,但 PUT 和 POST 失败。在使用套接字之前,我尝试使用 Jersey 的 WebResource、java 的 HttpUrlConnection、apache 的 HttpClientcurl 进行 PUT 和 POST。 OneDrive 根据动词/库配对响应不同的错误消息。

我已将请求发送到转储有效负载的本地服务器,以便我可以验证套接字代码是否没有问题。它正在发送来自文档的确切消息,但空白被替换为控制字符。

import java.io.PrintWriter;
import java.net.Socket;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class OneDriveUploadTest {

public static void main(String[] args) throws Exception {
String accessToken = "...";

// this works
// String data = "GET https://apis.live.net/v5.0/me/skydrive/files?access_token="+accessToken+"\r\n\r\n";

// this fails
String data = "POST https://apis.live.net/v5.0/me/skydrive/files?access_token="+accessToken+"\r\n\r\n--A300x\r\nContent-Disposition: form-data; name=\"file\"; filename=\"HelloWorld.txt\"\r\n\nContent-Type: application/octet-stream\r\nHello, World!\r\n--A300x--\r\n\r\n";

// this also fails
// String data = "PUT https://apis.live.net/v5.0/me/skydrive/files/HelloWorld.txt?access_token="+accessToken+"\r\n\r\nHello, World!\r\n\r\n";

SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
Socket socket = (SSLSocket) socketFactory.createSocket("apis.live.net", 443);
PrintWriter sout = new PrintWriter(socket.getOutputStream());
sout.print(data);
sout.flush();
InputStream sin = socket.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(sin));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("got: " + line);
}
sin.close();
sout.close();
socket.close();
}
}

最佳答案

我不想回答自己的问题,但我发现了一些有用的东西。此代码使用 Apache 的 HttpClient 通过 PUT 将文件上传到 OneDrive。

import java.io.File;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.HttpResponse;
import org.apache.http.entity.FileEntity;
import org.apache.http.client.methods.HttpPut;

public class OneDriveHttpClientUpload {
public static void main(String[] args) throws Exception {
String accessToken = "...";
String url = "https://apis.live.net/v5.0/me/skydrive/files/HelloWorld.txt?access_token="+accessToken;
HttpClient apClient = HttpClients.createDefault();
HttpPut httpPut = new HttpPut(url);
FileEntity file = new FileEntity(new File("testfile.txt"));
httpPut.setEntity(file);
HttpResponse ret = apClient.execute(httpPut);
}
}

关于java - OneDrive REST API 为文件上传提供 400 个无效动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373215/

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