Vb.net – POSTing multipart/form-data

Posted by & filed under .Net, Programming.

Today I needed to be able to POST multipart/form-data to a form in order to submit for values as well as upload a file. All using HTTP POST.

The first step was finding out that there does not seem to be a native way to post both form parameter and upload a file together. WebClient.UploadValues allows for the parameter name/value pairs, but sets it’s encoding type to application/x-www-form-urlencoded which is incorrect for file uploads. The code for this would look something like this:

Dim data As New NameValueCollection();
data.Add("id", "10")
data.Add("param", "content")
data.Add("file", "A0BA")
Dim client As New WebClient
client.UploadValues("http://my.test.address.com/", null, data)

I found that WebClient.UploadFile does set content type to multipart/form-data, *BUT* there is no way to post parameters, and the request is not properly formatted. To clarify, it will work fine with a IIS webserver, but any other real webserver (Apache, Tomcat) would choke on the malformed output. Microsoft does not do standards too well if you have not noticed. Microsoft — if you are reading this, kindly go read RFC1867. The call would look like this

Dim client As New WebClient
client.UploadFile("http://my.test.address.com/", null, "c:\test.txt");

My main issue is not the incompatibility in this instance, but rather that I cannot post parameters and the file in the same post.

In order to solve this, I found a excellent class written by Gregory Prentice. I compiled the c# class and included a reference to it in my vb.net app. Then it was a simple matter of adding the reference Imports Helpers and adding this code:

Dim form As New MultipartForm("http://path.to.my.form/form.aspx")
form.SetField("id", "10")
form.SetField("param", "content")

And booyah it works!

Additional Link Dump:
Uploading a file over HTTP in .NET
Three ways to use C# within a VB.NET project
System.Net.WebClient Class
How to post a file via HTTP post in vb.net
Upload files with HTTPWebrequest (multipart/form-data)

Troubleshooting Cacti’s Poller

Posted by & filed under Server Admin.

Today I had a Cacti server just stop polling out of the blue. It happened around the same time a coworker added a device to monitor though I’m not sure if this has anything to do with it. The box needed a reboot anyway, so I went ahead and gave it a reboot to see if that would be a easy fix. Nope.

Disabled the newly added host, but still no dice. I checked the log file and found:

06/14/2012 07:25:20 PM - SYSTEM STATS: Time:18.0779 Method:cmd.php Processes:1 Threads:N/A Hosts:12 HostsPerProcess:1 DataSources:0 RRDsProcessed:0 

So the poller was running, but not actually polling… a ls-lah of the RRD directory shows the files have been updated, and have the correct permissions set. The graphs are seemingly being updated with null values.

Forced a run of the cacti poller (ran as sudo or I’d need to run as www-data):

sudo php /usr/share/cacti/poller.php --force

Tail’d the log — note changing the setting under Settings -> General -> Poller Logging Level directly affects what gets logged here so it can he helpful to increase when troubleshooting.

tail -f /var/log/cacti/cacti.log
06/14/2012 07:25:20 PM - SYSTEM STATS: Time:18.0779 Method:cmd.php Processes:1 Threads:N/A Hosts:12 HostsPerProcess:12 DataSources:1214 RRDsProcessed:410 

Looks like it updated… not sure why it stopped. I sort of remember having to do this once before in the past and forcing the re-run fixed it then to IIRC.

Now that it did the full update… letting it poll to see if it does it again as it should…

UPDATE: It is still polling correctly — going to re-enable the host mentioned at the beginning and see what happens.

UPDATE 2: Everything is working good so far… increased my Poller threads from 1 to 2 and enabled process load balancing.

How to build a cheap HDTV Antenna

Posted by & filed under Electronic.

Found on a forum and it’s pretty cool: uhfhdtvantenna.blogspot.com/

If you don’t want to spend upwards of 70 bucks like I did on a not so great performing Yagi style antenna. Then build this diy hdtv antenna for almost nothing and get better results. My Yagi style antenna I got from ebay was pulling about 60-85 signal strength on most channels and ALWAYS would have continual dropouts making it impossible to watch Free OTA (over the air) digital HDTV. It always dropped out at the most inconvienent time. Another thing I hated about the yagi was it came with a rotor but the rotor had NO INDICATOR! You had no way of telling when the antenna was pointed in the right direction!!! That might work for analog signals you can watch come and go but is just ridiculous for digital signals! Digital signals are choppy, latent and very slow to respond with a moving antenna. Pointing must be very accurate for a strong digital signal. I found it was quite impossible to use a rotor without an indicator when positioning for a certain station. That is why you can see I have an old timey rotor in the setup. I built this bowtie style antenna in about an hour and can’t believe the way it out performs that other antenna. Swear to GOD! I am hitting 88 to 99 signal strength on all my channels now with NO DROPOUTS AT ALL!!!!