C#:
---
layout: forums
title: 'Solved - Using HttpWebRequest/HttpWebResponse? (C#)'
breadcrumbs:
- "Plugin Development": "/forums/plugin-development.105/"
- "Rust Development": "/forums/rust-development.4/"
---
<div class="titleBar">
<h1>
<span class="prefix prefixGreen">Solved</span> <a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/' | prepend: site.baseurl }}">Using HttpWebRequest/HttpWebResponse? (C#)</a>
</h1>
<p id="pageDescription" class="muted">Discussion in '<a href="{{ '/forums/rust-development.4/' | prepend: site.baseurl }}">Rust Development</a>' started by <a class="username"
dir="auto">Murky</a>, <a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/' | prepend: site.baseurl }}"><span class="DateTime" title="Apr 14, 2016 at 3:24 PM">Apr 14,
2016</span></a>.
</p>
</div>
<ol class="messageList" id="messageList">
<li id="post-196435" class="message" data-author="Murky">
<div class="messageUserInfo">
<div class="messageUserBlock">
<div class="avatarHolder">
<span class="helper"></span>
<a class="avatar Avm" data-avatarhtml="true"><img src="{{ '/assets/styles/oxide/logo.og.png' | prepend: site.baseurl }}" width="96" height="96" alt="Murky" /></a>
</div>
<h3 class="userText">
<a class="username" dir="auto">Murky</a>
</h3>
<span class="arrow"></span>
</div>
</div>
<div class="messageInfo primaryContent">
<div class="messageContent">
<article>
<blockquote class="messageText SelectQuoteContainer ugc baseHtml"> Like the title says, i wonder if i can use System.Net HttpWebRequest and HttpWebResponse, or am i restricted to
using webrequest which i found in the Oxide documentation.<br />
<br /> I wonder because i started on a plugin that depends on the derived classes. I took it for granted that it is supported. But when i try to test the plugin it doesnt
load.<br />
<br /> If i comment out the parts using the HttpWebRequest and HttpWebResponse classes it seems to work..<br />
<br /> Here is the plugin:<br />
<br />
<div class="bbCodeBlock bbCodeCode">
<div class="type">Code:</div>
{% raw %}<pre>using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Net;namespace Oxide.Plugins
{
[Info("TwitchAuth", "Murky", "0.0.1a")]
[Description("Toggle your admin status")]
class Twitch : RustPlugin
{ static string AccountName = "INSERT_TWITCH_USERNAME";
static string ErrorMessage = "Connect Steam to Twitch and follow @ twitch.tv/" + AccountName + " to access this server."; void CanClientLogin(Network.Connection connection)
{
if (!HasAccess(connection.userid))
{
ConnectionAuth.Reject(connection, ErrorMessage);
}
else
{
Puts(connection.userid + " allowed.");
}
}
private bool HasAccess(ulong steamID)
{
string username;
if ((username = HasSteamConnected(steamID)) != null)
{
if (IsFollowing(username))
{
return true;
}
else
{
Puts(steamID + " tried to connect but is not following you.");
// Is not following
return false;
}
}
else
{
// Not connected Steam to Twitch
Puts(steamID + " tried to connect but does not have Steam connected to Twitch.");
return false;
}
}
private bool IsFollowing(string username)
{
var json = ConsumeJson("https://api.twitch.tv/kraken/users/" + username + "/follows/channels/" + AccountName);
if (json != null)
{
return true;
}
return false;
}
string HasSteamConnected(ulong steamiD)
{
var json = ConsumeJson("https://api.twitch.tv/api/steam/" + steamiD);
if (json != null)
{
dynamic userInfo = (JObject)JsonConvert.DeserializeObject(json);
return userInfo["name"];
}
return null;
}
string ConsumeJson(string url)
{
try
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
if (WebResp.StatusCode == HttpStatusCode.OK)
{
using (var stream = WebResp.GetResponseStream())
{
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
}
}
// Do somethins better here.
catch { } // best effort
return null;
}
}
}
</pre>{% endraw %}
</div>Dont mind the messy code, i havent started refactoring it, it is just a quick mockup. <div class="messageTextEndMarker"> </div>
</blockquote>
</article>
</div>
<div class="messageMeta ToggleTriggerAnchor">
<div class="privateControls">
<span class="item muted">
<span class="authorEnd"><a class="username author" dir="auto">Murky</a>,</span>
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/' | prepend: site.baseurl }}" title="Permalink" class="datePermalink"><span class="DateTime"
title="Apr 14, 2016 at 3:24 PM">Apr 14, 2016</span></a>
</span>
</div>
<div class="publicControls">
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/' | prepend: site.baseurl }}" title="Permalink" class="item muted postNumber hashPermalink OverlayTrigger"
data-href="posts/196435/permalink">#1</a>
</div>
</div>
</div>
</li>
<li id="post-196439" class="message staff" data-author="Wulf">
<div class="messageUserInfo">
<div class="messageUserBlock">
<div class="avatarHolder">
<span class="helper"></span>
<a class="avatar Avm" data-avatarhtml="true"><img src="{{ '/assets/styles/oxide/logo.og.png' | prepend: site.baseurl }}" width="96" height="96" alt="Wulf" /></a>
</div>
<h3 class="userText">
<a class="username" dir="auto" itemprop="name">Wulf</a>
<em class="userBanner bannerRed wrapped" itemprop="title"><span class="before"></span><strong>Community Admin</strong><span class="after"></span></em>
</h3>
<span class="arrow"></span>
</div>
</div>
<div class="messageInfo primaryContent">
<div class="messageContent">
<article>
<blockquote class="messageText SelectQuoteContainer ugc baseHtml"> No, you can't use System.IO or System.Net as plugins are sandboxed. Oxide provides a webrequest wrapper
though, see <a href="http://docs.oxidemod.org/rust/#web-requests" target="_blank" class="externalLink">Rust</a>. <div class="messageTextEndMarker"> </div>
</blockquote>
</article>
</div>
<div class="messageMeta ToggleTriggerAnchor">
<div class="privateControls">
<span class="item muted">
<span class="authorEnd"><a class="username author" dir="auto">Wulf</a>,</span>
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/#post-196439' | prepend: site.baseurl }}" title="Permalink" class="datePermalink"><span class="DateTime"
title="Apr 14, 2016 at 3:29 PM">Apr 14, 2016</span></a>
</span>
</div>
<div class="publicControls">
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/#post-196439' | prepend: site.baseurl }}" title="Permalink"
class="item muted postNumber hashPermalink OverlayTrigger" data-href="posts/196439/permalink">#2</a>
</div>
</div>
</div>
</li>
<li id="post-196440" class="message" data-author="Murky">
<div class="messageUserInfo">
<div class="messageUserBlock">
<div class="avatarHolder">
<span class="helper"></span>
<a class="avatar Avm" data-avatarhtml="true"><img src="{{ '/assets/styles/oxide/logo.og.png' | prepend: site.baseurl }}" width="96" height="96" alt="Murky" /></a>
</div>
<h3 class="userText">
<a class="username" dir="auto">Murky</a>
</h3>
<span class="arrow"></span>
</div>
</div>
<div class="messageInfo primaryContent">
<div class="messageContent">
<article>
<blockquote class="messageText SelectQuoteContainer ugc baseHtml"> Ok thanks! <div class="messageTextEndMarker"> </div>
</blockquote>
</article>
</div>
<div class="messageMeta ToggleTriggerAnchor">
<div class="privateControls">
<span class="item muted">
<span class="authorEnd"><a class="username author" dir="auto">Murky</a>,</span>
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/#post-196440' | prepend: site.baseurl }}" title="Permalink" class="datePermalink"><span class="DateTime"
title="Apr 14, 2016 at 3:31 PM">Apr 14, 2016</span></a>
</span>
</div>
<div class="publicControls">
<a href="{{ '/threads/using-httpwebrequest-httpwebresponse-c.17354/#post-196440' | prepend: site.baseurl }}" title="Permalink"
class="item muted postNumber hashPermalink OverlayTrigger" data-href="posts/196440/permalink">#3</a>
</div>
</div>
</div>
</li>
</ol>