postutil发送文件

package cn.com.cetc16.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;


import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

public class PostUtil {
    private static final String CHARSET = "UTF-8";
    public static String post(String url, String params) {
        try {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            StringEntity sEntity = new StringEntity(params, CHARSET);
            httpPost.setEntity(sEntity);
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, CHARSET);
                }
            } finally {
                response.close();
                httpClient.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }
    public static String postObject(String url, Map<String,Object> parammap) {

        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 创建httppost
        HttpPost httppost = new HttpPost(url);
        // 创建参数队列
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        for (Map.Entry<String, Object> entry : parammap.entrySet()) {
            formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
        }
        UrlEncodedFormEntity uefEntity;
        try {
            uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
            httppost.setEntity(uefEntity);
            CloseableHttpResponse response = httpclient.execute(httppost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    // 调用接口返回的字符串
                    return EntityUtils.toString(entity, "UTF-8");

                }
            } finally {
                response.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }


    public static String postJson(String url, String json){
        return postJSONWithHeaders(url, json, null);
    }

    public static String postJSONWithHeaders(String url, String json, Map<String, String> headers) {
        try {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            StringEntity sEntity = new StringEntity(json, CHARSET);
            httpPost.setEntity(sEntity);
            httpPost.setHeader("Content-Type","application/json;charset=utf-8");
            if (headers != null) {
                for (String key : headers.keySet()) {
                    httpPost.setHeader(key, headers.get(key));
                }
            }
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, CHARSET);
                }
            } finally {
                response.close();
                httpClient.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }

    public static String post(String url, Map<String,String> params) {
        return postForm(url, params, null);
    }

    public static String postForm(String url, Map<String, String> params, String contentType) {
        try {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            if (contentType != null) {
                httpPost.setHeader("Content-Type",contentType);
            }
            List<NameValuePair> nameValuePairs = new LinkedList<>();
            for (String key : params.keySet()) {
                nameValuePairs.add(new BasicNameValuePair(key, params.get(key)));
            }
            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairs,CHARSET);
            httpPost.setEntity(urlEncodedFormEntity);
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, CHARSET);
                }
            } finally {
                response.close();
                httpClient.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }

    public static String postFormData(String url, Map<String, String> params) {
        try {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Content-Type","application/form-data");
            List<NameValuePair> nameValuePairs = new LinkedList<>();
            for (String key : params.keySet()) {
                nameValuePairs.add(new BasicNameValuePair(key, params.get(key)));
            }
            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairs,CHARSET);
            httpPost.setEntity(urlEncodedFormEntity);
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, CHARSET);
                }
            } finally {
                response.close();
                httpClient.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }

    public static String postXWwwFormUrlencoded(String url, Map<String, String> params) {
        try {
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
            List<NameValuePair> nameValuePairs = new LinkedList<>();
            for (String key : params.keySet()) {
                nameValuePairs.add(new BasicNameValuePair(key, params.get(key)));
            }
            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairs,CHARSET);
            httpPost.setEntity(urlEncodedFormEntity);
            CloseableHttpResponse response = httpClient.execute(httpPost);
            try {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    return EntityUtils.toString(entity, CHARSET);
                }
            } finally {
                response.close();
                httpClient.close();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return null;
    }

    /*
    *  map to key=mXUDwrkUNzqAgV43WBRV&value=cmoQhx3rE6tizIzqeTgJ
    */
    public static String mapToString(Map<String,String> reqMap){
        String result = "";
        if (reqMap ==null){
            return result;
        }else{
            Set<String> keySet = reqMap.keySet();
            for (String key : keySet) {
                String value = reqMap.get(key);
                if (value==null){
                    value="";
                }
                if (result ==null || ("").equals(result)){
                    result = result + key+"="+value;
                }else {
                    result = result +"&"+ key+"="+value;
                }
            }
        }
        return result;
    }


    /*
    * 发送文件
    */
    public static JSONObject sendPostWithFile(MultipartFile file, HashMap<String, Object> map,String fileOCRUrl) {
        DataOutputStream out = null;
        DataInputStream in = null;
        final String newLine = "\r\n";
        final String prefix = "--";
        JSONObject json = null;
        try {
            URL url = new URL(fileOCRUrl);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();

            String BOUNDARY = "-------KingKe0520a";
            conn.setRequestMethod("POST");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
            out = new DataOutputStream(conn.getOutputStream());

            // 添加参数file
            // File file = new File(filePath);
            StringBuilder sb1 = new StringBuilder();
            sb1.append(prefix);
            sb1.append(BOUNDARY);
            sb1.append(newLine);
            sb1.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"" + newLine);
            sb1.append("Content-Type:application/octet-stream");
            sb1.append(newLine);
            sb1.append(newLine);
            out.write(sb1.toString().getBytes());
            // in = new DataInputStream(new FileInputStream(file));
            in = new DataInputStream(file.getInputStream());
            byte[] bufferOut = new byte[1024];
            int bytes = 0;
            while ((bytes = in.read(bufferOut)) != -1) {
                out.write(bufferOut, 0, bytes);
            }
            out.write(newLine.getBytes());

            StringBuilder sb = new StringBuilder();
            int k = 1;
            for (String key : map.keySet()) {
                if (k != 1) {
                    sb.append(newLine);
                }
                sb.append(prefix);
                sb.append(BOUNDARY);
                sb.append(newLine);
                sb.append("Content-Disposition: form-data;name=" + key + "");
                sb.append(newLine);
                sb.append(newLine);
                sb.append(map.get(key));
                out.write(sb.toString().getBytes());
                sb.delete(0, sb.length());
                k++;
            }


            byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
            out.write(end_data);
            out.flush();

            // 定义BufferedReader输入流来读取URL的响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line = null;
            StringBuffer resultStr = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                resultStr.append(line);
            }
            json = (JSONObject)JSONObject.parse(resultStr.toString());

        } catch (Exception e) {
            System.out.println("发送POST请求出现异常!" + e);
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return json;
    }


    public static void main(String[] args) throws FileNotFoundException {
        HashMap<String, Object> parammap = new HashMap<>();
        parammap.put("postdata","access_token=WJVgPO3KEce3PVn4QM8TGum6BtaaZ64C");

        File file = new File("F:\\mr\\文档\\胡萝卜.jpg");
        FileItem fileItem = MultipartFileUtil.getMultipartFile(file, "胡萝卜.jpg");
        MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
        JSONObject jsonObject = sendPostWithFile(multipartFile, parammap,"http://58.216.151.154:7203/cqamr_data_ws/fmarket_btyetourl.action");
        System.out.println(jsonObject);


//        Map<String,Object> parammap = new HashMap<>();
//        parammap.put("access_token","access_token=WJVgPO3KEce3PVn4QM8TGum6BtaaZ64C");
//        String s = postObject("http://58.216.151.154:7203/cqamr_data_ws/fmarket_btyetourl.action", parammap);


//        Map<String,String> params = new HashMap<>();
//        params.put("postdata","key=mXUDwrkUNzqAgV43WBRV&value=cmoQhx3rE6tizIzqeTgJ");
//        params.put("postdata","value=cmoQhx3rE6tizIzqeTgJ&key=mXUDwrkUNzqAgV43WBRV");
//        String s = postXWwwFormUrlencoded("http://58.216.151.154:7203/cqamr_data_ws/fmarket_getAccessToken.action", params);
//        System.out.println(s);


//        Map<String,String> params = new HashMap<>();
//        params.put("key","mXUDwrkUNzqAgV43WBRV");
//        params.put("value","cmoQhx3rE6tizIzqeTgJ");
//        String s1 = mapToString(params);
//        System.out.println(s1);



//        Map<String,String> params1 = new HashMap<>();
//        params.put("postdata",s1);
//        String s = postXWwwFormUrlencoded("http://58.216.151.154:7203/cqamr_data_ws/fmarket_getAccessToken.action", params1);
//        System.out.println(s);



    }
}

<think>嗯,用户想要了解多期DID模型的安慰剂检验,特别是随机分配处理时间和城市的Stata代码。首先,我需要回忆一下多期DID和安慰剂检验的基本概念。多期DID与传统DID不同,处理时间是分阶段实施的,不同个体或城市在不同时间点受到处理。安慰剂检验通常用来验证处理效应是否真实存在,通过随机分配处理时间和地点,观察是否还能得到显著的结果,如果结果不显著,说明原模型可能可靠。 用户需要的是Stata代码,所以得考虑如何在Stata中实现这一点。首先,需要明确安慰剂检验的步骤:随机分配处理时间和处理组城市,然后进行回归分析,重复多次,最后看估计量的分布。关键点包括生成随机的处理时间和处理组,然后运行DID回归,保存系数,最后汇总结果。 接下来,我需要思考如何随机分配处理时间。通常,处理时间应该在样本时间范围内随机选择,每个处理组的城市被分配一个随机的处理年份。可能需要使用`runiform()`函数生成随机数,然后转换为具体的年份。同时,要确保每个处理组城市的处理时间在样本中存在,避免选择不存在的年份。 然后,处理组城市的选择也需要随机。可能需要从所有城市中随机选取一部分作为处理组。可以用`sample`命令或者生成随机数后排序来选取前N个作为处理组。 接着,编写DID模型部分。多期DID通常使用双向固定效应模型,包含个体固定效应、时间固定效应以及处理变量(处理组×处理后时间)。在Stata中,可以使用`reghdfe`命令来高效处理高维固定效应。 然后,循环部分需要多次重复这个过程,比如500次,每次生成不同的处理时间和处理组,运行回归,保存系数和p值。这里需要使用`forvalues`循环,或者在Stata中使用`simulate`命令,不过手动编写循环可能更直观。 保存结果时,可能需要将每次的系数和p值存储在一个新的数据集中,最后用直方图展示系数的分布,并标出原始模型的估计值。这有助于观察安慰剂检验的结果是否围绕零分布,原始估计是否异常。 需要注意的问题包括:确保处理时间在样本时间范围内,处理组城市不要重复或遗漏,回归模型是否正确设定,以及重复次数足够多(通常500次以上)。此外,可能需要使用bootstrap或置换检验的思想,但这里更偏向于随机化检验。 可能的错误点:处理时间生成时可能超出实际数据范围,处理组可能重复,或者在回归时没有正确加入固定效应。需要检查生成的变量是否正确,比如处理变量是否是处理组且在处理后时间。 最后,代码的结构应该是:准备数据,循环多次,每次生成处理时间和处理组,创建处理变量,运行回归,存储结果,最后汇总和绘图。需要提醒用户替换变量名,比如实际的处理时间变量、城市变量等,并调整循环次数。 可能还需要考虑并行处理以提高速度,但Stata的循环通常是单线程的,所以如果重复次数多,可能需要较长时间。用户可能需要根据情况调整次数。 总结一下,步骤大致是:随机分配处理时间和处理组,构建DID变量,回归,重复,然后分析结果。确保代码清晰,注释详细,用户能理解每一步的作用,并能替换必要的变量。</think>多期DID模型的安慰剂检验可通过**随机化处理时间和处理组**实现。以下是分步说明和Stata代码示例: --- ### **Step 1:基础模型设定** 假设原始多期DID模型为: $$ y_{it} = \alpha + \beta D_{it} + \gamma_i + \delta_t + \epsilon_{it} $$ 其中 $D_{it}$ 为处理变量,$\gamma_i$ 为城市固定效应,$\delta_t$ 为时间固定效应。 --- ### **Step 2:安慰剂检验逻辑** 1. **随机分配处理时间**:为每个城市随机分配一个“虚假”处理时间。 2. **随机分配处理组**:随机选择部分城市作为“虚假”处理组。 3. **重复估计**:多次随机化后,检验估计系数 $\beta$ 是否集中在0附近。 --- ### **Stata代码实现** #### 1. 生成随机处理时间和处理组 ```stata * 设定随机种子(保证可重复性) set seed 1234 * 生成随机处理时间(假设样本时间范围为2000-2020) gen placebo_year = floor(runiform(2000, 2021)) // 为每个城市随机分配处理年份 * 随机选择处理组(假设50%城市为处理组) gen placebo_treat = (runiform() > 0.5) // 随机生成0/1虚拟变量 ``` #### 2. 构建处理变量 ```stata * 生成处理变量(D_it) gen D_placebo = (year >= placebo_year) & (placebo_treat == 1) ``` #### 3. 回归并保存结果 ```stata * 运行安慰剂回归 reghdfe y D_placebo, absorb(city year) cluster(city) * 保存系数和p值 scalar beta_placebo = _b[D_placebo] scalar p_placebo = 2 * ttail(e(df_r), abs(_b[D_placebo]/_se[D_placebo])) ``` --- ### **Step 3:循环模拟(500次示例)** ```stata * 初始化存储变量 capture postutil clear postfile placebo_coef beta_placebo p_placebo using placebo_results, replace * 循环500次 forvalues i = 1/500 { * 随机生成处理时间和处理组 quietly { gen placebo_year = floor(runiform(2000, 2021)) gen placebo_treat = (runiform() > 0.5) gen D_placebo = (year >= placebo_year) & (placebo_treat == 1) } * 运行回归并保存结果 quietly reghdfe y D_placebo, absorb(city year) cluster(city) scalar beta = _b[D_placebo] scalar p = 2 * ttail(e(df_r), abs(_b[D_placebo]/_se[D_placebo])) * 存储结果 post placebo_coef (beta) (p) * 清理临时变量 drop placebo_year placebo_treat D_placebo } * 结束循环并保存 postclose placebo_coef use placebo_results, clear ``` --- ### **Step 4:结果分析** ```stata * 绘制系数分布直方图 histogram beta_placebo, frequency normal /// title("安慰剂检验:估计系数分布") /// xtitle("估计系数") ytitle("频数") /// addplot(pci 0 0 0 50, lcolor(red)) // 在0处添加红线 * 计算原始模型的真实系数(需提前保存) local original_beta = 0.15 // 替换为实际值 local original_p = 0.03 // 替换为实际值 * 标注原始系数 twoway (histogram beta_placebo) /// (scatteri 0 `original_beta', msymbol(X) mcolor(red)), /// legend(label(1 "安慰剂系数") label(2 "真实系数")) ``` --- ### **注意事项** 1. **显著性判断**:若安慰剂系数集中在0附近且原始系数显著偏离分布,则通过检验。 2. **样本要求**:确保随机化后处理组和对照组的时间趋势满足平行趋势假设。 3. **代码调整**:根据实际变量名修改 `city`, `year`, `y` 等名称。 通过此方法,可验证DID模型的稳健性,排除虚假效应的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值