[Twisted-web] Python and Cors

Deve Krehbiel deve at speedprint.com
Sun Aug 27 12:01:55 MDT 2017


This is what I get without your code:
index1.html:1 XMLHttpRequest cannot load
http://192.168.1.122:81/servos.rpy?value=70P. No
'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://192.168.1.122:9000' is therefore not allowed access.
jquery.min.js:4 XHR failed loading: GET "
http://192.168.1.122:81/servos.rpy?value=70P".

This is what I get with it:
jquery.min.js:4 GET http://192.168.1.122:81/servos.rpy?value=100P
send @ jquery.min.js:4
ajax @ jquery.min.js:4
r.(anonymous function) @ jquery.min.js:4
move @ index1.html:54
onclick @ index1.html:17
index1.html:1 XMLHttpRequest cannot load
http://192.168.1.122:81/servos.rpy?value=100P. No
'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://192.168.1.122:9000' is therefore not allowed access. *The
response had HTTP status code 500.*
jquery.min.js:4 XHR failed loading: GET "
http://192.168.1.122:81/servos.rpy?value=100P".

I appreciate your efforts and if you have any other ideas... Thank You!

Deve

On Sun, Aug 27, 2017 at 12:48 PM, Deve Krehbiel <deve at speedprint.com> wrote:

> Thank you for the response. In trying that code, it made it so the LAN
> cannot move the buttons either. Here is the error list I got:
>
> *web.Server Traceback (most recent call last):*
> exceptions.NameError: global name 'origin' is not defined
> /usr/lib/python2.7/dist-packages/twisted/web/server.py:189 in process
> 188                    self._encoder = encoder
> 189            self.render(resrc)
> 190        except:
> /usr/lib/python2.7/dist-packages/twisted/web/server.py:238 in render
> 237        try:
> 238            body = resrc.render(self)
> 239        except UnsupportedMethod as e:
> /usr/lib/python2.7/dist-packages/twisted/web/resource.py:250 in render
> 249            raise UnsupportedMethod(allowedMethods)
> 250        return m(request)
> 251
> /usr/local/www/servos.rpy:15 in render_GET
> 14    def render_GET(self,request):
> 15        if origin in (self.permitted_origins):
> 16            request.setHeader('Access-Control-Allow-Origin', origin)
> exceptions.NameError: global name 'origin' is not defined
>
> Deve
>
> On Sun, Aug 27, 2017 at 12:03 PM, Donal McMullan <donal.mcmullan at gmail.com
> > wrote:
>
>> Perhaps you just need to set the 'Access-Control-Allow-Origin' header?
>> Something like this might work:
>>
>>
>> # Import necessary files
>>
>> import serial
>>
>> from twisted.web.resource import Resource
>>
>> # Setup Arduino at correct speed
>>
>> try:
>>
>>     arduino = serial.Serial('/dev/ttyACM0', 9600)
>>
>> except:
>>
>>     arduino = serial.Serial('/dev/ttyACM1', 9600)
>>
>>
>>
>> class MoveServo(Resource):
>>
>>     isLeaf = True
>>
>>     permitted_origins = ('http://192.168.1.122:9000',)
>>
>>
>>
>>     def render_GET(self,request):
>>
>>         if origin in (self.permitted_origins):
>>
>>             request.setHeader('Access-Control-Allow-Origin', origin)
>>
>>         try:
>>
>>             # Send value over serial to the Arduino
>>
>>             arduino.write(request.args['value'][0])
>>
>>             return 'Success'
>>
>>         except:
>>
>>             return 'Failure'
>>
>>
>>
>> resource = MoveServo()
>>
>> On 27 August 2017 at 17:10, Deve Krehbiel <deve at speedprint.com> wrote:
>>
>>> First post so forgive me if I am not explaining this right.
>>>
>>> I am trying to make a baby cam and then heavily document it for everyone
>>> to have access to. I am using a Raspberry Pi with Rasbian. I am using
>>> mjpg-streamer for the streaming with no problems.
>>>
>>> The problem is I am also using two servos for pan and tilt. To
>>> accomplish this I am using an Arduino Uno. This is so I can add IR lighting
>>> for night vision, etc later. I am not a programmer so this is getting
>>> frustrating after a few weeks of failure.
>>>
>>> How is it failing you might ask..well, its working perfectly with only
>>> ONE exception:
>>> Every time I push the button for left/right/up/down I get this:
>>>
>>> XMLHttpRequest cannot load http://192.168.1.122:81/servos.rpy?value=100P.
>>> No 'Access-Control-Allow-Origin' header is present on the requested
>>> resource. Origin 'http://192.168.1.122:9000' is therefore not allowed
>>> access.
>>>
>>> On the local area network, it still works, but taking it to the internet
>>> it does not.
>>>
>>> Here are the two programs that make this happen. One is servos.rpy and
>>> the other is the supporting HTML/Get script;
>>> ****
>>> servos.rpy
>>> -----------------------------------
>>> # Import necessary files
>>> import serial
>>> from twisted.web.resource import Resource
>>> # Setup Arduino at correct speed
>>> try:
>>>         arduino = serial.Serial('/dev/ttyACM0', 9600)
>>> except:
>>>         arduino = serial.Serial('/dev/ttyACM1', 9600)
>>>
>>> class MoveServo(Resource):
>>>         isLeaf = True
>>>         def render_GET(self,request):
>>>                 try:
>>>                 # Send value over serial to the Arduino
>>>                         arduino.write(request.args['value'][0])
>>>                         return 'Success'
>>>                 except:
>>>                         return 'Failure'
>>>
>>> resource = MoveServo()
>>> ***
>>>
>>> Now for the HTML/Get script:
>>>
>>> **
>>> <!doctype html>
>>> <html>
>>> <head>
>>> <title>Make Use Of DIY Security Camera</title>
>>> <style type="text/css">
>>> #container {
>>> /* center the content */
>>> margin: 0 auto;
>>> text-align: center;
>>> }
>>> </style>
>>> </head>
>>> <body>
>>> <div id="container">
>>> <img src="/?action=stream" /><br>
>>> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jque
>>> ry.min.js"></script><br />
>>> <button onclick="servos.move('P', 10)">Left</button>
>>> <button onclick="servos.move('P', -10)">Right</button>
>>> <button onclick="servos.move('T', -10)">Down</button>
>>> <button onclick="servos.move('T', 10)">Up</button>
>>> </div>
>>> </body>
>>> <script>
>>> var servos;
>>> $( document ).ready(function() {
>>> servos = moveServos();
>>> });
>>> function moveServos() {
>>> // Store some settings, adjust to suit
>>> var panPos = 70,
>>> tiltPos = 90,
>>> tiltMax = 170,
>>> tiltMin = 45,
>>> panMax = 170,
>>> panMin = 20;
>>> return {
>>> move:function(servo, adjustment) {
>>> var value;
>>> if(servo == 'P') {
>>> if(!((panPos >= panMax && adjustment > 0) || (panPos <= panMin &&
>>> adjustment < 0))) {
>>> // Still within allowed range, "schedule" the movement
>>> panPos += adjustment;
>>> }
>>> value = panPos + 'P';
>>> }
>>> else if(servo == 'T') {
>>> if(!((tiltPos >= tiltMax && adjustment > 0) || (tiltPos <= tiltMin &&
>>> adjustment < 0))) {
>>> // Still within allowed range, "schedule" the movement
>>> tiltPos += adjustment;
>>> }
>>> value = tiltPos + 'T';
>>> }
>>> // Use AJAX to actually move the servo
>>> $.get('http://192.168.1.122:81/servos.rpy?value=' + value);
>>> },
>>> }
>>> }
>>> </script>
>>> </html>
>>>
>>> *****
>>> Twisted is started:  sudo twistd -n web -p 81 --path /usr/local/www/
>>>
>>> I would be forever grateful if someone could take a serious look at this
>>> and tell me where I am going wrong. Once this is fixed, I can start
>>> documenting the entire system for everyone. Thank you!
>>>
>>> Deve
>>>
>>> _______________________________________________
>>> Twisted-web mailing list
>>> Twisted-web at twistedmatrix.com
>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>>
>>>
>>
>> _______________________________________________
>> Twisted-web mailing list
>> Twisted-web at twistedmatrix.com
>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-web/attachments/20170827/94cf9a15/attachment-0001.html>


More information about the Twisted-web mailing list