我需要以编程方式在wordpress管理面板中执行某些操作,但无法管理如何使用C#和HttpWebRequest登录到Wordpress.
这是我做的:
private void button1_Click(object sender, EventArgs e)
{
string url = "http://localhost/wordpress/wp-login.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookies = new CookieContainer();
SetupRequest(url, request, cookies);
//request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
//request.Headers["Accept-Language"] = "uk,ru;q=0.8,en-us;q=0.5,en;q=0.3";
//request.Headers["Accept-Encoding"] = "gzip,deflate";
//request.Headers["Accept-Charset"] = "windows-1251,utf-8;q=0.7,*;q=0.7";
string user = "test";
string pwd = "test";
request.Credentials = new NetworkCredential(user, pwd);
string data = string.Format(
"log={0}&pwd={1}&wp-submit={2}&testcookie=1&redirect_to={3}",
user, pwd,
System.Web.HttpUtility.UrlEncode("Log In"),
System.Web.HttpUtility.UrlEncode("http://localhost/wordpress/wp-admin/"));
SetRequestData(request, data);
ShowResponse(request);
}
private static void SetupRequest(string url, HttpWebRequest request, CookieContainer cookies)
{
request.CookieContainer = cookies;
request.UserAgent = "Mozilla/5.0 …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET应用程序,我需要从安全摄像头显示视频源.视频Feed的内容类型为'multipart/x-mixed-replace; boundary = - myboundary'与边界之间的图像数据.我需要帮助将数据流传递到我的页面,以便我拥有的客户端插件可以像使用直接浏览到摄像头的Web界面一样使用流.以下代码不起作用:
//Get response data
byte[] data = HtmlParser.GetByteArrayFromStream(response.GetResponseStream());
if (data != null)
{
HttpContext.Current.Response.OutputStream.Write(data, 0, data.Length);
}
return;
Run Code Online (Sandbox Code Playgroud) 据我所知,可以通过HTTP协议传输二进制文件.但HTTP是基于文本的协议,典型的HTTP响应框架如下所示:
HTTP/1.1 200 OK
Date: Wed, 23 May 2012 22:38:34 GMT
Content-Length: 438
Content-Type: text/html; charset=UTF-8
Here goes content
Run Code Online (Sandbox Code Playgroud)
如果是这样,二进制文件应该如何编码?什么是内容类型?内容是用base64编码的 - 与POP3协议中的附件相同吗?或者它是原始数据(如果是这样可能不会导致问题吗?)
我正在尝试从发送POST请求时收到的服务器读取响应.查看fiddler,它说这是一个JSON响应.如何使用C#Winforms将其解码为普通字符串,最好不使用外部API.如果您需要,我可以提供额外的代码/提琴手结果.
小提琴和乱码图像:


我试图在下面的代码中读取流:
Stream sw = requirejs.GetRequestStream();
sw.Write(logBytes, 0, logBytes.Length);
sw.Close();
response = (HttpWebResponse)requirejs.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
MessageBox.Show(sr.ReadToEnd());
Run Code Online (Sandbox Code Playgroud) 当我抓到.NET时WebException,我应该关闭/处理Response.GetResponseStream()?
在MSDN示例不会关闭或异常处理任何事情.
我处理了流,这引起了很大的问题.因为GetResponseStream()(总是?/有时?)返回相同的实例.因此,当我获得响应流然后处理它时,可能会将异常重新抛出到另一个层,该层也会获得响应流,它将被处理掉并且不可读并因此而抛出更多异常.
所以我正在使用 HttpClient 为我的项目编写一个扩展类,因为我从 HttpWebRequest 转移过来。
做 POST 请求时,如何将普通字符串作为参数发送?没有 json 或任何只是一个简单的字符串。
到目前为止,这就是它的样子。
static class HttpClientExtension
{
static HttpClient client = new HttpClient();
public static string GetHttpResponse(string URL)
{
string fail = "Fail";
client.BaseAddress = new Uri(URL);
HttpResponseMessage Response = client.GetAsync(URL).GetAwaiter().GetResult();
if (Response.IsSuccessStatusCode)
return Response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
else
return fail;
}
public static string PostRequest(string URI, string PostParams)
{
client.PostAsync(URI, new StringContent(PostParams));
HttpResponseMessage response = client.GetAsync(URI).GetAwaiter().GetResult();
string content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
return content;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你这样看
client.PostAsync(URI, new StringContent(PostParams));
Run Code Online (Sandbox Code Playgroud)
您可以看到我刚刚尝试创建新的 StringContent 并将字符串传递给它,但响应返回 404 页面未找到。我如何正确使用 Post.Async(); …
使用HttpWebRequest对象发出请求时,我需要调用方法GetResponse()来发送请求并获取响应.
此方法的问题在于,在收到所有数据之前,它不会返回响应对象.假设我正在下载一个100 MB的文件,在响应完成并且下载了所有100 MB之前,我将无法读取它.
我想要的是能够在它们到达时立即读取响应流字节,而无需等待响应完成.
我知道我可以使用Range Http标头,但它不适用于我的情况.
我想知道我将如何阅读与HttpWebRequest和HttpWebResponse的持久连接.问题似乎是GetResponseStream()函数在返回之前等待关闭服务器连接.
有没有其他简单的方法来读取彗星连接?不起作用的示例.
// get the response stream
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
// fill our buffer
count = resStream.Read(buf, 0, buf.Length);
// as long as we read something we want to print it
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
Debug.Write(tempString);
}
}
while (true); // any more data to read?
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Json发布到我们的Web服务.我的问题是,当我的request.ContentLength超过7kb时.我将在request.GetResponse()处获得Web异常500.但是如果我的request.ContentLength低于7kb,我的帖子就成功发送了.
错误信息:
The remote server returned an error: (500) Internal Server Error.
Run Code Online (Sandbox Code Playgroud)
源代码:
public static string JsonPost(string url, string method, string postData)
{
Uri address = new Uri(url + method);
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/json";
byte[] byteData = UTF8Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
try
{
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader reader = new StreamReader(response.GetResponseStream());
string JsonResponse = reader.ReadToEnd();
return JsonResponse; …Run Code Online (Sandbox Code Playgroud) 我有兴趣捕获用户首次提交到我的网站时的互联网协议 (IP) 地址。我的印象是 SvelteKit 提交与其他 Node.js 服务器解决方案类似。
我一直在关注这篇文章,但我没有看到任何远程类似的东西req.headers['x-forwarded-for'],或者req.socket.remoteAddress在我的请求中没有看到任何东西提交到 SvelteKit 中的 API 服务器。
以下是我在请求中看到的内容(通过 API 提交中的控制台日志):
arg1:
body: (... data ... )
Headers:
accept:'*/*'
accept-encoding:'gzip, deflate'
accept-language:'en-US,en;q=0.9'
connection:'keep-alive'
content-length:'141'
content-type:'text/plain;charset=UTF-8'
cookie:'userid=c03efd10-3085-46cb-bacd-9eaeb605426e'
host:'192.168.1.22:3000'
origin:'http://192.168.1.22:3000'
referer:'http://192.168.1.22:3000/learn'
user-agent:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
locals:
userid: '....'
method: 'POST'
params: {}
path: '/api/user_form'
query: ...
rawBody: ...
Run Code Online (Sandbox Code Playgroud)
绝对不行socket,没有标题['x-forwarded-for']
请注意,我正在本地网络上进行此操作。主机位于同一网络中的一台计算机上,客户端位于另一台计算机上。事实上,主机= 192.168.1.22:3000,客户端= 192.168.1.4
注意2,我正在通过以下方式运行程序svelte-kit dev --host 0.0.0.0
我没看到什么?有没有办法使用 Sveltekit 从网络提交中获取客户端用户的 …
httpwebresponse ×10
c# ×8
.net ×3
http ×2
json ×2
asp.net ×1
comet ×1
http-headers ×1
httpclient ×1
httpresponse ×1
idisposable ×1
mjpeg ×1
node.js ×1
svelte ×1
sveltekit ×1
web-services ×1
webexception ×1
winforms ×1
wordpress ×1