我正在尝试让 HttpURLConnection
将 JSON 字符串远程发布到 PHP 文件。无论我做什么都不起作用。这是我当前的代码:
HttpURLConnection httpcon = (HttpURLConnection) ((new URL('http://domain.com/me.php').openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();
String initial = "{'out': '" + idir + prod + ".jpg', 'in': '" + item[3] + "'}";
byte[] outputBytes = initial.getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);
os.close();
我知道 initial
字符串包含数据,我已对其运行 System.out.println
和 outputBytes
变量以及两者有内容。
我知道它没有发布,因为我设置了 PHP 文件以将发布的内容保存到本地文件中。运行时不会创建任何文件。
我知道 PHP 方面的工作正常,并且服务器接受帖子,因为我可以很好地运行它:
$ curl -H "Accept: application/json" -H "Content-Type: application/json" -d "{'value': 7.5}" "http://domain.com/me.php"
它可以很好地创建文件并将帖子内容写入输出文件。
编辑
好的,打印响应后,我现在收到 401 代码,未经授权。我正在使用 Apache HTPASSWD 身份验证,但我传递的是用户并将 URL 作为 http://user:pass@domain.com/me.php
传递。这在 CLI 中的curl 中有效,所以我认为它也可以在这里工作,显然它不能。
那么如何使用 HttpURLConnection 进行身份验证?
最佳答案
您需要设置基本身份验证。您可以通过纯 Java 或使用 Apache HttpClient 来完成此操作。
关于Java 和 HttpURLConnection 不发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413245/