C# 后台Http访问 raw from 键值对

本文介绍了一种使用C#实现的HTTP请求处理方法,包括GET和POST请求的具体实现,并提供了使用RestSharp库进行POST请求的多种方式。此外,还介绍了如何将对象转换为JSON字符串以及如何从JSON字符串中反序列化对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using RestSharp;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace Quotation.Common.Extensions
{


public class HttpRequstExtensions
{


/// <summary>
/// 参数
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <returns></returns>
public static string httpPostAsync(string url, List<KeyValuePair<string, string>> data)
{
        HttpClient client = new HttpClient();
        var form_data = new FormUrlEncodedContent(data);
        var reponse = client.PostAsync(url, form_data);
        if (reponse.IsCompleted)
        {
              var result = reponse.Result;
              var resdata = result.Content.ReadAsStringAsync();
              return resdata.ToString();
        }
        return "";
}


/// <summary>
/// 发送Get请求,获取内容
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string HttpGet(string url)
{
         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
         request.Credentials = CredentialCache.DefaultCredentials;
         HttpWebResponse response = (HttpWebResponse)request.GetResponse();
         Stream receiveStream = response.GetResponseStream();
         StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
         string text = readStream.ReadToEnd();
         response.Close();
         readStream.Close();
         return text;
}


/// <summary>
/// Post请求
/// </summary>
/// <param name="url"></param>
/// <param name="pars"></param>
/// <returns></returns>
public static string HttpPost(string url, string pars, string contentType = "")
{
          byte[] bytes = Encoding.UTF8.GetBytes(pars);
          HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
          request.Method = "POST";
          request.ContentLength = bytes.Length;
          //request.ContentType = "text/xml";
          if (!string.IsNullOrEmpty(contentType))
                request.ContentType = contentType;
          request.Credentials = CredentialCache.DefaultCredentials;

          //Stream writer = request.GetRequestStream();
          //writer.Write(bytes, 0, bytes.Length);
          //writer.Close();

          HttpWebResponse response = (HttpWebResponse)request.GetResponse();
          Stream receiveStream = response.GetResponseStream();
          StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
          string text = readStream.ReadToEnd();
          response.Close();
          readStream.Close();
          return text;
}


/// <summary>
/// 1.1公用 from 键值对,固定参数
/// </summary>
/// <param name="url"></param>
/// <param name="promotionId"></param>
/// <param name="resultCode"></param>
/// <param name="resultDesc"></param>
/// <returns></returns>
public static string RestSharpPost(string url, string promotionId, int resultCode, string resultDesc)
{
           RestClient client = new RestClient(url);
           RestRequest request = new RestRequest(Method.POST);
           request.AddParameter("promotionId", promotionId);
           request.AddParameter("resultCode", resultCode);
           request.AddParameter("resultDesc", resultDesc);
           IRestResponse response = client.Execute(request);
           if (response.StatusCode == HttpStatusCode.OK)
           {
                  return response.Content;
           }
           else
           {
                  return response.ErrorException.StackTrace;
           }
}


/// <summary>
/// 1.2公用 from 键值对
/// </summary>
/// <param name="url"></param>
/// <param name="ht"></param>
/// <returns></returns>
public static string RestSharpPost(string url, Hashtable ht)
{
           RestClient client = new RestClient(url);
           RestRequest request = new RestRequest(Method.POST);
           if (ht != null && ht.Count > 0)
           {
                   foreach (DictionaryEntry de in ht)
                   {
                            request.AddParameter(de.Key.ToStr(), de.Value);
                   }
           }
           IRestResponse response = client.Execute(request);
           if (response.StatusCode == HttpStatusCode.OK)
           {
                    return response.Content;
           }
           else
           {
                    return response.ErrorException.StackTrace;
           }
}

/// <summary>
/// 1.3公用raw 推荐使用
/// </summary>
/// <param name="url"></param>
/// <param name="data">json 字符串</param>
/// <returns></returns>
public static string RestSharpPostRaw(string url, string data)
{
           RestClient client = new RestClient(url);
           RestRequest request = new RestRequest(Method.POST);
           if (!string.IsNullOrEmpty(act))
           {
                      request.AddHeader("content-type", "application/json");
                      request.AddParameter("application/json", data, ParameterType.RequestBody);
           }

           IRestResponse response = client.Execute(request);
           if (response.StatusCode == HttpStatusCode.OK)
           {
                      return response.Content;
           }
           else
           {
                      return response.ErrorException.StackTrace; //异常信息返回
           }
}

 

调用   Raw

string ret= "";
string url= "https://www.xxxx.com/index/update";

//对象参数

var data = new { shopId="你好1", grossProfit = "你好2", rebate = "你好3"};

try
{
          //第一种方法调用Raw
          ret = HttpRequstExtensions.RestSharpPostRaw(url, data.ToJson());

          //第二种方法调用Raw
          //ret = HttpRequstExtensions.HttpPost(url, data.ToJson(), "application/json");

}
catch
{

}

 

//json  反 json string字符串

public static string ToJson(this object obj)
{
           var json = string.Empty;
           try
           {
              var jSetting = new JsonSerializerSettings { ContractResolver = new NullToEmptyStringResolver(), DateFormatString = "yyyy-MM-dd HH:mm:ss" };
              json = JsonConvert.SerializeObject(obj, jSetting);
           }
           catch
           {
              return json;
           }
           return json;
}

 

/// <summary>
/// json转对象忽略大小写
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T ToObject<T>(this string json) where T : new()
{
           try
           {
                 if (string.IsNullOrEmpty(json))
                     return new T();
                 return JsonConvert.DeserializeObject<T>(json);
           }
           catch (Exception ex)
           {
                return new T();
           }
}

 

}}

 

转载于:https://www.cnblogs.com/chxl800/p/6837094.html

解释一下以下代码#include <termios.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <sys/signal.h> #include <pthread.h> #define BAUDRATE B115200 #define COM1 "/dev/ttySAC0" /*Exynos4412 串口 0 控制台 */ #define COM2 "/dev/ttySAC1" /*Exynos4412 串口 1 */ #define ENDMINITERM1 27 /* ESC to quit miniterm */ #define ENDMINITERM2 3 /*ctl +c to quit miniterm */ #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE;volatile int fd; /* 终端中断信号处理函数 */ void child_handler(int s) { printf("stop!!!\n"); STOP=TRUE; } /* PC 机键盘线程处理函数 */ void* keyboard(void * data) { int c; for (;;){ scanf("%c",&c); /* 如果输入键值为回车或 CTRL+C 则置停止位 退出 */ if( (c== ENDMINITERM1) || (c==ENDMINITERM2)){ printf("getchar is :%d \nbreak\n",c); STOP=TRUE; break ; } } return NULL; } /*--------------------------------------------------------*/ /* modem input handler */ /* 读取终端字符处理线程函数 */ void* receive(void * data) { int c; int ret; printf("read modem\n"); while (STOP==FALSE) { read(fd,&c,1); /* com port */ /* 读取 1 个字符 */ write(1,&c,1); /* stdout */ /* 打印到标准输出设备 */ usleep(1); } printf("exit from reading modem\n"); return NULL; } /*--------------------------------------------------------*/ /* 写入终端字符处理线程函数 */ void* send(void * data) { int c='0'; printf("send data\n"); while (STOP==FALSE) { c++; c %= 255; write(fd,&c,1); /* stdout */ /* 将转换后字符写入串口终端 */usleep(100000); } return NULL; /* wait for child to die or it will become a zombie */ } /*--------------------------------------------------------*/ int main(int argc,char** argv) { struct termios oldtio,newtio; /* 终端设置 termios 成员 */ struct sigaction sa; /* 定义信号 */ int ok; pthread_t th_a, th_b, th_c; void * retval; /* 根据命令行参数个数 打开不同串口终端 默认打开串口 0 */ if( argc > 1) fd = open(COM2, O_RDWR ); else fd = open(COM1, O_RDWR ); //| O_NOCTTY |O_NONBLOCK); if (fd <0) { perror(COM1); exit(-1); } printf("\nOpen COM Port Successfull\n"); /* 保存串口终端原有设置 */ tcgetattr(fd,&oldtio); /* save current modem settings */ /* 设置波特率 */ cfsetispeed(&newtio,BAUDRATE);/*设置串口输??/ cfsetospeed(&newtio,BAUDRATE); /* 设置 8 位数据位 */ newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; /* 设置奇偶校验位 无 */ newtio.c_cflag &= ~PARENB; /*set the PARENB bit to zero-------disable parity checked*/ newtio.c_iflag &= ~INPCK; /*set the INPCK bit to zero--------INPCK means inparitycheck(not paritychecked)*/ /* 设置停止位 1 */ newtio.c_cflag &= ~CSTOPB; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; /* now clean the modem line and activate the settings for modem */ /* 设置 串口终端立即生效 */ if(tcsetattr(fd,TCSANOW,&newtio) != 0) { perror("\n"); return 0; } /* 设置信号处理句柄 */ sa.sa_handler = child_handler; sa.sa_flags = 0; sigaction(SIGCHLD,&sa,NULL); /* handle dying child *//* 建立串口终端处理线程 */ pthread_create(&th_a, NULL, keyboard, 0); pthread_create(&th_b, NULL, receive, 0); pthread_create(&th_c, NULL, send, 0); pthread_join(th_a, &retval); pthread_join(th_b, &retval); pthread_join(th_c, &retval); /* 还原串口终端原有设置 */ tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */ close(fd); exit(0); }
最新发布
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值