怎么利用HttpURLConnection向服务器发送键值对 5C

安卓实现通过放在数据流中OutputStream上传键值对,content请求头怎么写的

0

3个回答

看你的服务器怎么约定,一般是post ,content-type 用 x-www-form-urlencoded

也就是post类似 name=xxx&id=xxx 这样的字符串

1
u010409359
u010409359 参数做url编码这个是什么意思,因为我还要一起传送图片什么的,这个键值对也要一起放outputstream里面
大约一年之前 回复
LaoChengZier
翻滚的老鼠屎 回复caozhy: 参数做url编码这个是什么意思,因为我还要一起传送图片什么的,这个键值对也要一起放outputstream里面
大约一年之前 回复
caozhy
weixin_45841714 回复LaoChengZier: 循环遍历你的Map或者存放键值对的结构,用等号和and拼接,参数做url编码
大约一年之前 回复
LaoChengZier
翻滚的老鼠屎 回复LaoChengZier: 就是 name=xxx&id=xxx 这样的
大约一年之前 回复
LaoChengZier
翻滚的老鼠屎 麻烦您帮我写一下拼接的参数吧,我看的一般都是文件的拼接。。。
大约一年之前 回复

package com.honor.web.util.tools;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class HttpPostUtil {
URL url;

HttpURLConnection conn;

String boundary = "--------httppost123";

Map<String, String> textParams = new HashMap<String, String>();

Map<String, File> fileparams = new HashMap<String, File>();

DataOutputStream ds;

public HttpPostUtil(String url) throws Exception {
    this.url = new URL(url);
}

//重新设置要请求的服务器地址,即上传文件的地址。
public void setUrl(String url) throws Exception {
    this.url = new URL(url);
}

//增加一个普通字符串数据到form表单数据中
public void addTextParameter(String name, String value) {
    textParams.put(name, value);
}

//增加一个文件到form表单数据中
public void addFileParameter(String name, File value) {
    fileparams.put(name, value);
}

// 清空所有已添加的form表单数据
public void clearAllParameters() {
    textParams.clear();
    fileparams.clear();
}

// 发送数据到服务器,返回一个字节包含服务器的返回结果的数组
public byte[] send() throws Exception {
    initConnection();
    try {
        conn.connect();
    } catch (SocketTimeoutException e) {
        // something
        throw new RuntimeException();
    }
    ds = new DataOutputStream(conn.getOutputStream());
    writeFileParams();
    writeStringParams();
    paramsEnd();
    InputStream in = conn.getInputStream();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    int b;
    while ((b = in.read()) != -1) {
        out.write(b);
    }
    //out.flush();
    conn.disconnect();
    //in.close();
    //out.close();
    return out.toByteArray();
}

//文件上传的connection的一些必须设置
private void initConnection() throws Exception {
    conn = (HttpURLConnection) this.url.openConnection();
    conn.setDoOutput(true);
    conn.setUseCaches(false);
    conn.setConnectTimeout(10000);//连接超时为10秒  
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type",
            "multipart/form-data; boundary=" + boundary);
}

//普通字符串数据
private void writeStringParams() throws Exception {
    Set<String> keySet = textParams.keySet();
    for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
        String name = it.next();
        String value = textParams.get(name);
        ds.writeBytes("--" + boundary + "\r\n");
        ds.writeBytes("Content-Disposition: form-data; name=\"" + name
                + "\"\r\n");
        ds.writeBytes("\r\n");
        ds.writeBytes(encode(value) + "\r\n");
    }
}

//文件数据
private void writeFileParams() throws Exception {
    Set<String> keySet = fileparams.keySet();
    for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
        String name = it.next();
        File value = fileparams.get(name);
        ds.writeBytes("--" + boundary + "\r\n");
        ds.writeBytes("Content-Disposition: form-data; name=\"" + name
                + "\"; filename=\"" + encode(value.getName()) + "\"\r\n");
        ds.writeBytes("Content-Type: " + getContentType(value) + "\r\n");
        ds.writeBytes("\r\n");
        ds.write(getBytes(value));
        ds.writeBytes("\r\n");
    }
}

//获取文件的上传类型,图片格式为image/png,image/jpg等。非图片为application/octet-stream
private String getContentType(File f) throws Exception {

    //return "application/octet-stream";  // 此行不再细分是否为图片,全部作为application/octet-stream 类型
    ImageInputStream imagein = ImageIO.createImageInputStream(f);
    if (imagein == null) {
        return "application/octet-stream";
    }
    Iterator<ImageReader> it = ImageIO.getImageReaders(imagein);
    if (!it.hasNext()) {
        imagein.close();
        return "application/octet-stream";
    }
    imagein.close();
    return "image/" + it.next().getFormatName().toLowerCase();//将FormatName返回的值转换成小写,默认为大写

}

//把文件转换成字节数组
private byte[] getBytes(File f) throws Exception {
    FileInputStream in = new FileInputStream(f);
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    byte[] b = new byte[1024];
    int n;
    while ((n = in.read(b)) != -1) {
        out.write(b, 0, n);
    }
    in.close();
    return out.toByteArray();
}

//添加结尾数据
private void paramsEnd() throws Exception {
    ds.writeBytes("--" + boundary + "--" + "\r\n");
    ds.writeBytes("\r\n");
}

// 对包含中文的字符串进行转码,此为UTF-8。服务器那边要进行一次解码
private String encode(String value) throws Exception {
    return URLEncoder.encode(value, "UTF-8");
}

public static void main(String[] args) throws Exception {//
    HttpPostUtil u = new HttpPostUtil("地址");//
    u.addTextParameter("fileType", "1");
    u.addFileParameter("file", new File("C:\\Users\\Administrator\\Pictures\\hq1.jpg"));
    //u.addTextParameter("text", "中文");
    byte[] b = u.send();
    String result = new String(b, "utf-8");
    System.out.println(result);
}

}

1
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析
HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析 下边的总结对我帮助蛮大的~不仅用法了解,整个连接流程也要明白! 原文链接地址:  http://www.blogjava.net/supercrsky/articles/247449.html  针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及
Android使用HttpURLConnection进行POST请求,向服务器上传数据
先在清单文件中需要添加权限:<uses-permission android:name="android.permission.INTERNET"/> 开始使用HttpURLConnection进行POST请求,向服务器上传数据: (1)定位到要获取资源的网址并打开连接:URL url = new URL(String urlPath); HttpURLConnection httpURLCon
java基础——用HttpURLConnection向服务器发送POST请求
OutputStream out = null; InputStream in = null; OutputStreamWriter outWrite = null; InputStreamReader inReader = null; BufferedReader buffReader = null; String line = ""; StringBuffer buff = new Strin
模拟浏览器向服务器发送和接收数据
创建一个服务器程序,用来接收和返回数据: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getMethod()); //获取请求方式 System.out.println(request.getHeader("ref
通过浏览器向Linux服务器发送命令
在公有云上,我们常看到通过浏览器能向远程的服务器发送命令,初看是不是很神奇。 今天我们用shellinabox为例来体验一下,shellinabox是一款基于 Web 的远程 Terminal 开源模拟器软件,本篇文章基于centos7.3环境。 安装 EPEL yum源 wget http://dl.fedoraproject.org/pub/epe...
Android 中使用HttpUrlConnection实现get请求服务器
这篇文章主要演示:在android中如何向服务器发一个get请求,以及开子线程来更新ui,以及Handler发消息和处理消息的使用。 1.创建子线程请求数据: final String strWebAddr = et_input.getText().toString(); new Thread(new Runnable() { @Override public
06_android入门_采用HttpURLConnection的POST方式实现登陆案例
1.继续采用  03_android入门_采用RelativeLayout实现登陆界面
HttpUrlconnection POST提交 用于接口调用传参
package com.jr.demo;import java.io.BufferedReader;import java.io.DataOutputStream; import java.io.IOException;import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; i
用HttpURLConnection 在Java后台发送请求并接收返回数据
我们通常做Java后台接口,是让前端访问的,让前端获取数据或者做增删改查,但是有时候,我们做的Java接口是让其他系统的Java后台调用的,让其他系统从我们这个系统获取数据或者做业务,这样就要用到HttpURLConnection。本文写得急,仅贴出样例供参考。 (1)先写一个简单的,只发送请求,不附带参数。思路是打开一个URL连接,设置请求的方式,获取输入流,从流里面解析 出数据。 @Re
android使用HttpURLConnection上传文件同时提交参数
在使用HttpURLConnection作为请求方式,有时候会有这样的需求。给一个接口上传文件,并且同时要提交其他的参数。但你可能会遇到这样的问题,就是无法同时上传文件的时候又提交其他类型的参数。怎么解决这个问题呢? 注释比较清晰,直接看代码吧: private static HttpURLConnection uRLConnection; private static
HttpURLConnection(File) POST请求发送参数和上传文件
package com.face; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import ...
在Java中使用HttpURLConnection发送http客户端请求、服务器端返回信息、接受服务器端的信息
在最近的项目中要用到后台发送http请求(post)方式,获取服务器端返回哦信息。下面是自己做的一个简单的演示示例。 首先创建一个web工程,简单的一个web工程就好。里面创建两个jsp和一个servlet。其中jsp作为客户端,而servlet就相当于一个服务器端。 下面是其中的一个jsp1     pageEncoding="UTF-8"%> Insert titl
Android向服务器端发送json数据
android 向服务器端发送json数据,本文讲解的知识点比较基础,如果你是大神,请直接关闭该网页,免得浪费你宝贵时间。 1.向服务器端发送json数据
连接服务器,并向服务器发送一个GET请求包,等待响应【异步方式】
连接服务器,并向服务器发送一个GET请求包,等待响应。#include &amp;lt;iostream&amp;gt; #include &amp;lt;string&amp;gt; using namespace std; #include &amp;lt;boost/asio/ip/tcp.hpp&amp;gt; #include &amp;lt;boost/asio.hpp&amp;gt; #include &amp;lt;boost/bin...
HttpURLconnection使用POST方式提交JSON数据给服务器
HttpURLconnection使用POST方式提交JSON数据给服务器最原始的味道,使用H团体票URLconnection提交JSON数据给后台服务器。此处留下标记。 将javabean对象转换成Json字符串。 通过HttpUrlconnection提交数据。 getRequestCode返回415 1.javabean转换成JSON字符串工具类。这里使用Gson解析器,请各位自行添加依赖包。
Android 自己封装HttpUrlConnection上传图片和字段
工具类:/** * Created by hui on 2017/5/8. */import android.util.Log;import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS
【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL、java.net.URLConnection,JDK自带的类;  1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection) 2.设置请求的参数 3.发送请求 4.以输入流的形式获取返回内容 5.关闭输入流封装请求类 1 package com.util; 2 3 ...
使用HttpURLConnection向服务器发送post和get请求
使用HttpURLConnection向服务器发送post和get请求 转自:http://www.cnblogs.com/linjiqin/archive/2011/09/19/2181634.html 一、使用HttpURLConnection向服务器发送get请求 1、向服务器发送get请求 @Test publicvoid sendSms() throw
android如何通过HttpURLConnection向服务器发送Cookie
登录成功后取出cookies = httpClient.getCookieStore().getCookies();再次向服务器发送请求时需要将cookies发送到服务器如何实现。。。。?
如何通过 HttpURLConnection 向服务器发送大量表单数据的?
用POST方式的表单。rnrn同时读取服务器的返回结果。
通过HttpURLConnection连接服务器,发送报文,获取服务器报文返回
Java 通过HttpURLConnection连接服务器 发送 POST 和 GET 请求package com.dataservice.utils;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnecti
HttpURLConnection上传文件及服务器端接收
一、HttpURLConnection上传文件: (一)、 HttpURLConnection上传文件操作步骤:     1、实例化URL对象。调用URL有参构造方法,参数是一个url地址;     2、调用URL对象的openConnection()方法,创建HttpURLConnection对象;     3、调用HttpURLConnection对象setDoOutput(true)...
HttpURLConnection 发送post请求。并将结果以JSONObject对象返回的轮子
Android新版sdk废除了对Apache的HttpClient。以前写的发送Http请求的轮子不能用了。所以用java底层支持的HttpURLConnection类重新造了一个轮子。 虽然Google官方推荐使用的volley框架使用的时候简单的多,但是过高的封装,导致某些特定的情况下,反而不方便(比如在非UI线程中需要进行网络操作时)。 以下是我的轮子的代码 public static
Android通过HttpURLConnection上传多个文件至服务器 - 流传输
上传单个文件: public static void uploadFile(final File file, final String url, final Handler handler, final HttpCallbackListener listener){ new Thread(new Runnable() { @Override ...
关于Android使用HttpURLConnection传输含有中文JSON数据的报错、乱码问题
//一般在设置http的请求头这里要设置合理 connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); //在获取数据的时候也要加上UTF-8 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
HttpURLConnection Post请求上传文件和参数到servlet
前台代码:  public String uplaod(String actionUrl, Map params) {          InputStream in = null;         String BOUNDARY = java.util.UUID.randomUUID().toString();         String PREFFIX = "--", LINEND
post请求向服务器发送数据
package com.xreal.arsearch.utils; import android.util.Log; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.
httpUrlConnection post请求 传参数 及客户端接收参数
httpUrlConnection post请求 传参数 及客户端接收参数
【 网络爬虫】java 使用Socket, HttpUrlConnection方式抓取数据
结构:公共方法 url任务的pojo类 import com.tsj.simple.enumeration.TaskLevel; /** * url任务的pojo类 * @author tsj-pc */ public class UrlPojo { public UrlPojo(String url) { this.url = url; } @Overr
第二章:使用 JavaScript 和 Ajax 发出异步请求
本文中,您将开始接触最基本和基础性的有关 Ajax 的全部对象和编程方法:XMLHttpRequest 对象。该对象实际上仅仅是一 个跨越所有 Ajax 应用程序的公共线程,您可能已经预料到,只有彻底理解该对象才能充分发挥编程的潜力。事实上,有时您会发现,要正确 地使用 XMLHttpRequest,显然不能 使用 XMLHttpRequest。这到底是怎么回事呢?Web 2.0 一瞥在深
HttpURLConnection发送实体数据到服务端
使用场景:     客户端需要将实体数据同步到平台库,这里采用的是HTTP的形式,以下用户数据同步到平台库为例 1.需要导入xstream.jar 2.定义请求和响应的父类实体数据,方便后续编码 /** * 请求响应的父类对象 */ public class Generic { public Header header; }   3.定义消息头实体,用于存放请求的...
Windows Server 2003 使用vSphere5.5连接ESXI5.5 “客户端无法向服务器发送完整的请求” 的解决办法
今天在Windows Server 2003 上用vSphere5.5连接ESXI5.5出现了如下错误:vSphere CLient 无法连接“192.168.1.1”。出现未知连接错误。(客户端无法向服务器发送完整的请求。(The underlying connection was closed: An unexpected errror occurred on a send))经查询,出现此错
Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据
这里面简单介绍下,HttpURLConnection连接服务器,并返回数据客户端代码java代码:import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class PostXml { public stati
Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)
问题描述    当我们使用SpringMVC作为服务端的框架时,有时不仅仅要应对web前端(jsp、javascript、Jquery等)的访问请求,有时还可能需要响应Android和JavaSE(桌面应用)这些客户端的请求,因此,除了web使用form表单或者ajax作为客户端获取Controller响应之外,纯Java语言向SpringMVC的Controller提供参数和请求结果也是必须要实现
发送JSON数据到服务器
方案一 : 把JSON格式的字符串序列化成JSON的二进制 #pragma 方案一 : 把JSON格式的字符串序列化成JSON的二进制 - (void)POSTJSON_01 { NSString *jsonStr = @"{\"name\":\"大发明家\"}"; // 把JSON格式的字符串序列化成JSON的二进制 NSData *jsonData = [jsonS
Ajax使用JSON向服务器发送数据
做了这么多,你已经能更顺手地使用JavaScript了,也许在考虑把更多的模型信息放在浏览器上。不过,看过前面的例子后(使用XML向服务器发送复杂的数据结构),你可能会改变主意。通过串连接来创建XML串并不好,这也不是用来生成或修改XML数据结构的健壮技术。 JSON概述 XML的一个替代方法是JSON,可以在www.json.org找到。JSON是一种文本格式,它独立于具体语言,但是
程序中调用for循环向dict持续添加键值对及为指定键增加新数据的方法
if key in data:#判断key是否已存在dic中,存在则向键中添加值,不存在则直接添加键值对 if isinstance(data[key],list):#判断该键对应的值是否多个 thelist=data[key] thelist.append(value)
向服务器发送请求的方式,HttpServletRequest 对象
1. 地址栏输入  2. 超链接 &amp;lt;a href = &quot;  &quot;&amp;gt;  &amp;lt;/a&amp;gt; 3. Form 表单 4. ajax  5. 请求转发 6. 重定向    HttpServletRequest 对象: 来接收客户端发送过来的请求信息 1) 常用方法 2) 获取请求头   3) 获取客户端请求参数(客户端提交的数据)      请求乱码解决: ...
Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
这个技术和xml差不过,主要是服务端代码稍微修改,客户端代码修改部分传递参数就可以完成,但在之前需要导入json所需要的jar包。 PostJson.java代码package PostPager;import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import ja
Linux——利用Xshell向Linux服务器传送文件
    在使用远程桌面和虚拟机时,发现在自己电脑和服务器间拷贝文件是一件很费力的事情。这时候Xshell了解一下~第一步:获取Linux服务器的IP地址ifconfig 然后查看inet addr 后面的地址              如果没有的话就为Linux临时设一个IP地址第二步:安装Xshell和Xftp,然后打开Xshell,和Linux服务器建立连接。图中主机一栏填写刚刚查得的Linu...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 利用数据库建课程表 利用大数据进行机器学习

相似问题

2
怎么让安卓的文件在闪存中被覆盖删除?
0
word 点击锚点后,怎么跳转为原来的位置?
3
导包的时候报错了,这些资源是不是本来就有的,要怎么添加呢(我可能删错了一些文件)
1
xshell怎么编译项目?
2
okhttp抛出, Response response = client.newCall(request).execute();报错,该怎么解决
0
TabLayout中 PlaceholderFragment 与 Adapter 到底是如何关联得? Placeholder是怎么工作得?
3
Android页面fragment要怎么写,左边按钮,右边不同listview
1
小白安卓开发:怎么在Fragment里添加ListVIew啊?初学者疑惑
1
androidstudio添加混淆后出了警告 都是ormlite 有大神知道怎么解决吗
0
Android开发:利用audioRecordor类实现本地录音时,在屏幕熄灭一分钟后所录音为完全无声(采样值为0)
2
android怎么判断服务器返回的数据是不是图像
4
Android项目运行出错,该怎么解决?
0
环信及时通讯这些及时通讯的语音怎么发送的?
0
Android怎么通过应用程序修改桌面其他应用图标?
2
unity怎么做出能在物体上涂鸦画图的游戏?
6
android studio 出现程序包R不存在的问题该怎么解决,求解
3
android studio 出现程序包R不存在的问题该怎么解决,求解
0
android studio3.0预览(preview)窗口,无法显示手机外框,怎么设置能像2.1版本一样
1
安卓中类似图中的时间轴记录图是怎么实现的?
1
使用uiautomator时,不在屏幕范围内的元素怎么遍历啊?