当我从HttpPost使用setHeader设置"Authorization"标头时,主机名从请求中消失,并且总是返回错误400(错误请求).相同的代码在纯java(没有android)上工作正常,当我在android上删除设置"Authorization"标题时,它工作正常,但我需要授权.这是一个代码(域已更改):
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://myhost.com/test.php");
post.setHeader("Accept", "application/json");
post.setHeader("User-Agent", "Apache-HttpClient/4.1 (java 1.5)");
post.setHeader("Host", "myhost.com");
post.setHeader("Authorization",getB64Auth());
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("data[body]", "test"));
AbstractHttpEntity ent=new UrlEncodedFormEntity(nvps, HTTP.UTF_8);
ent.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
ent.setContentEncoding("UTF-8");
post.setEntity(ent);
post.setURI(new URI("http://myhost.com/test.php"));
HttpResponse response =client.execute(post);
Run Code Online (Sandbox Code Playgroud)
方法getB64Auth()返回使用Base64编码的"login:password",如:"YnxpcYRlc3RwMTulHGhlSGs =",但这并不重要.
当在纯java上调用上面的代码时,这是一个lighttpd的error.log:
2011-02-23 15:37:36: (request.c.304) fd: 8 request-len: 308
POST /test.php HTTP/1.1
Accept: application/json
User-Agent: Apache-HttpClient/4.1 (java 1.5)
Host: myhost.com
Authorization: Basic YnxpcYRlc3RwMTulHGhlSGs=
Content-Length: 21
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Encoding: UTF-8
Connection: Keep-Alive
HTTP/1.1 200 OK
Content-type: …Run Code Online (Sandbox Code Playgroud) (已解决 - 见下面的评论)
我有一个实现多部分文件上传的类.代码适用于我尝试过的每个java客户端,除了Android,它是我的Android应用程序中唯一不能与我的后端服务配合使用的HTTP请求代码.
连接responseCode是"-1"所以这里有一些非常讨厌的东西.在Apache访问或错误日志中没有显示任何条目,似乎请求永远不会脱离Android平台.代码通过连接写入正确,但挂起连接读取,超时然后返回.真实手机和模拟器的行为是相同的.
有没有人知道在Android中发布多部分文件时需要注意的任何问题?
我包括下面的课程(制作的小卫生模型),所以你可以看到我在做什么
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class GeoPictureUploader
{
static String serviceDomain = "http://staging.abaqus.net";
static String postUrl = serviceDomain + "/geo/upl/wupload/pictures";
static String CRLF = "\r\n";
static String twoHyphens = "--";
static String boundary = "*****mgd*****";
private String pictureFileName = null;
private String name = null;
private String password = null;
private DataOutputStream dataStream = null;
enum ReturnCode …Run Code Online (Sandbox Code Playgroud) 我如何OutputStream使用org.apache.http.impl.client.DefaultHttpClient?
我想写一个长字符串到输出流.
使用HttpURLConnection你会像这样实现它:
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
writeXml(wout);
Run Code Online (Sandbox Code Playgroud)
有没有使用DefaultHttpClient类似于我上面的方法?我如何写一个OutputStream使用DefaultHttpClient而不是HttpURLConnection?
例如
DefaultHttpClient client = new DefaultHttpClient();
OutputStream outstream = (get OutputStream somehow)
Writer wout = new OutputStreamWriter(out);
Run Code Online (Sandbox Code Playgroud)