如何在POST请求时在HTTP标头中设置自定义变量

时间:2012-07-31 13:34:51

标签: java httpwebrequest http-headers

  

我想将自己的机器名称添加到http请求标头中作为自定义   JAVA中的变量。

     

这是我的代码:

private void sendIssuesToWebService(Issue issue) {
        // TODO Auto-generated method stub

        System.out.println("\n\n");
        //LOG.info("Sending issue : "+issue.getKey());


        HttpURLConnection ycSend = null;
        BufferedReader in1 = null;
        JSONObject j = null ;
        try{

            URL urlSend = null;

            try{
                urlSend = new URL(targetURL+"Issue/ImportIssue");
            }
            catch (MalformedURLException e) {
                // TODO Auto-generated catch block

                LOG.severe(" URL Malformed Exception while authentication ");
                e.printStackTrace();
            }



            try{
                ycSend = (HttpURLConnection) urlSend.openConnection();
            }
            catch (IOException e) {
                // TODO Auto-generated catch block

                LOG.severe(" Error in Http URL Connection while authentication");
                e.printStackTrace();
            }


            ycSend.setDoOutput(true);

            ycSend.setRequestMethod("POST");
            ycSend.setRequestProperty("Content-Type", "application/json");


            try{

                OutputStreamWriter outSend = null;


                outSend = new OutputStreamWriter(ycSend.getOutputStream());
                outSend.write(IssueAndHistoryJsonStr);


                outSend.flush();

            }catch(Exception e)
            {
                LOG.severe("Cannot write output stream while sending issue ");

            }

            System.out.println( ycSend.getResponseCode()+"\n\n\n");

            if(ycSend.getResponseCode()!=200){

                in1 = new BufferedReader(new InputStreamReader(
                        ycSend.getErrorStream()));


                String inputLine;
                while ((inputLine = in1.readLine()) != null) 
                    inputResponse=inputResponse+inputLine;
                //System.out.println("$$$$$$$"+inputResponse);

                try{
                    j = new JSONObject(inputResponse);
                    LOG.info(j.get("errors").toString());
                }
                catch(Exception e){



                    String errorTitle = inputResponse.substring(inputResponse.indexOf("<title>")+7,inputResponse.indexOf("</title>"));

                    LOG.severe(errorTitle);



                }

                LOG.severe(" Error in Sending  an Issue to the web service and the issue key is  "+issue.getKey());
                //LOG.severe("Error is : "+j.get("errors"));
            }
            else
            {

                LOG.info("Issue "+issue.getKey()+" Sent successfully" );
                countIssues++;
                System.out.println("\n\n");
            }
            //LOG.info("Issue ***** " +issue.getKey()+ " sent with response : "+inputResponse);




        }

        catch(Exception e)
        {
            LOG.severe(" Error in Sending  an Issue to the web service and the issue key is  "+issue.getKey());
            //LOG.severe(yc.getResponseMessage());
            //LOG.severe("Error is : "+j.get("errors"));
            e.printStackTrace();
        }

    }

2 个答案:

答案 0 :(得分:2)

我相信你只想添加另一个类似于内容类型的requestProperty。

ycSend.setRequestProperty("Machine-Name", MachineName);

答案 1 :(得分:-1)

也许this会有所帮助。或者,您可以查看Apache HTTPClient来执行此操作。

要获取主机名,您可以这样做:

try {
    InetAddress addr = InetAddress.getLocalHost();

    // Get hostname
    String hostname = addr.getHostName();
} catch (UnknownHostException e) {
  //DO SOMETHING 
}